diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h index 4ff08514e7e889f28e4019f13bd11707a134728f..1ac42be1e91cb4f988f20147ac00ecb3dd0337f8 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h +++ b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h @@ -1,3073 +1,3070 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see <http://www.gnu.org/licenses/>. - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_Types.h - * \brief This file defines the 802.21 types or constants defined in Std 802.21-2008 Table F1, F2, F3, - * F4, F5, F6, F7, F8, F9, F12, F13, F19, F20, F22, L2. Some tables may be not implemented at all. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ -#ifndef __MIH_C_LINK_TYPES_H__ -#define __MIH_C_LINK_TYPES_H__ -#include <sys/types.h> -#include <linux/types.h> - -#ifndef USER_MODE -# define USER_MODE -# warning "Hack USER_MODE" -#endif -//----------------------------------------------------------------------------- -#include "MIH_C_Link_Constants.h" -#include "MIH_C_bit_buffer.h" -//----------------------------------------------------------------------------- -#define MIH_C_DEBUG_SERIALIZATION 1 -#define MIH_C_DEBUG_DESERIALIZATION 1 -//----------------------------------------------------------------------------- -#define STR(x) #x - -/** \defgroup MIH_C_INTERFACE 802.21 interface - * - */ - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.1 Basic data types -//----------------------------------------------------------------------------- - - -//----------------------- BITMAP(size) ---------------------------------------- -/*! \var typedef u_int8_t MIH_C_BITMAP8_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for u_int8_t. - */ -typedef u_int8_t MIH_C_BITMAP8_T; -/*! \var typedef u_int16_t MIH_C_BITMAP16_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for u_int16_t. - */ -typedef u_int16_t MIH_C_BITMAP16_T; -/*! \struct MIH_C_BITMAP24_T - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - */ -typedef struct MIH_C_BITMAP24 { - u_int8_t val[3]; -} __attribute__((__packed__)) MIH_C_BITMAP24_T; -/*! \var typedef u_int32_t MIH_C_BITMAP32_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for u_int32_t. - */ -typedef u_int32_t MIH_C_BITMAP32_T; -/*! \var typedef u_int64_t MIH_C_BITMAP64_T; - * \brief A type definition for u_int64_t. - */ -typedef u_int64_t MIH_C_BITMAP64_T; -/*! \struct MIH_C_BITMAP128_T - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - */ -typedef struct MIH_C_BITMAP128 { - u_int64_t val[2]; -} __attribute__((__packed__)) MIH_C_BITMAP128_T; -/*! \struct MIH_C_BITMAP256_T - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - */ -typedef struct MIH_C_BITMAP256 { - u_int64_t val[4]; -} __attribute__((__packed__)) MIH_C_BITMAP256_T; - -#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C -/*! \def TYPEDEF_BITMAP6(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP8_T. - */ -#define TYPEDEF_BITMAP6(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP8_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ - void MIH_C_BITMAP8_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ - inline unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - return sprintf(buffP, "0x%02X", *bitmapP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP8_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP8_decode(bbP, bitmapP);}; - -/*! \def TYPEDEF_BITMAP8(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP8_T. - */ -#define TYPEDEF_BITMAP8(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP8_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ - void MIH_C_BITMAP8_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - return sprintf(buffP, "0x%02X", *bitmapP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP8_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP8_decode(bbP, bitmapP);}; - -/*! \def TYPEDEF_BITMAP16(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP16_T. - */ -#define TYPEDEF_BITMAP16(DATA_TYPE_NAME) typedef MIH_C_BITMAP16_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP16_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP16_T* dataP);\ - void MIH_C_BITMAP16_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP16_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - return sprintf(buffP, "0x%04X", *bitmapP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP16_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP16_decode(bbP, bitmapP);}; - -/*! \def TYPEDEF_BITMAP20(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP24_T. - */ -#define TYPEDEF_BITMAP20(DATA_TYPE_NAME) typedef MIH_C_BITMAP24_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP24_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP24_T* dataP);\ - void MIH_C_BITMAP24_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP24_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - return sprintf(buffP, "0x%02X%02X%02X", bitmapP->val[0], bitmapP->val[1], bitmapP->val[2]);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP24_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP24_decode(bbP, bitmapP);}; - -/*! \def TYPEDEF_BITMAP32(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP32_T. - */ -#define TYPEDEF_BITMAP32(DATA_TYPE_NAME) typedef MIH_C_BITMAP32_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP32_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP32_T* dataP);\ - void MIH_C_BITMAP32_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP32_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - return sprintf(buffP, "0x%08X", *bitmapP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP32_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP32_decode(bbP, bitmapP);}; - -/*! \def TYPEDEF_BITMAP64(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP64_T. - */ -#define TYPEDEF_BITMAP64(DATA_TYPE_NAME) typedef MIH_C_BITMAP64_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP64_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP64_T* dataP);\ - void MIH_C_BITMAP64_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP64_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - unsigned int buffer_index = 0;\ - buffer_index = sprintf(buffP, "0x%08x", (MIH_C_UNSIGNED_INT4_T)(*bitmapP>>32));\ - buffer_index = sprintf(&buffP[buffer_index], "%08x", (MIH_C_UNSIGNED_INT4_T)(*bitmapP));\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP64_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP64_decode(bbP, bitmapP);}; - -/*! \def TYPEDEF_BITMAP128(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP128_T. - */ -#define TYPEDEF_BITMAP128(DATA_TYPE_NAME) typedef MIH_C_BITMAP128_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP128_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP128_T* dataP);\ - void MIH_C_BITMAP128_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP128_T* dataP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP128_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP128_decode(bbP, bitmapP);}; - -/*! \def TYPEDEF_BITMAP256(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP256_T. - */ -#define TYPEDEF_BITMAP256(DATA_TYPE_NAME) typedef MIH_C_BITMAP256_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP256_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP256_T* dataP);\ - void MIH_C_BITMAP256_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP256_T* dataP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP256_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP256_decode(bbP, bitmapP);}; - -#else -#define TYPEDEF_BITMAP6(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - -#define TYPEDEF_BITMAP8(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - -#define TYPEDEF_BITMAP16(DATA_TYPE_NAME) typedef MIH_C_BITMAP16_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - -#define TYPEDEF_BITMAP20(DATA_TYPE_NAME) typedef MIH_C_BITMAP24_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - -#define TYPEDEF_BITMAP32(DATA_TYPE_NAME) typedef MIH_C_BITMAP32_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - -#define TYPEDEF_BITMAP64(DATA_TYPE_NAME) typedef MIH_C_BITMAP64_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - -#define TYPEDEF_BITMAP128(DATA_TYPE_NAME) typedef MIH_C_BITMAP128_T DATA_TYPE_NAME ## _T;\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - -#define TYPEDEF_BITMAP256(DATA_TYPE_NAME) typedef MIH_C_BITMAP256_T DATA_TYPE_NAME ## _T;\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); -#endif - -#define BITMAP6(VAR_NAME) MIH_C_BITMAP8_T VAR_NAME; -#define BITMAP8(VAR_NAME) MIH_C_BITMAP8_T VAR_NAME; -#define BITMAP16(VAR_NAME) MIH_C_BITMAP16_T VAR_NAME; -#define BITMAP20(VAR_NAME) MIH_C_BITMAP24_T VAR_NAME; -#define BITMAP24(VAR_NAME) MIH_C_BITMAP24_T VAR_NAME; -#define BITMAP32(VAR_NAME) MIH_C_BITMAP32_T VAR_NAME; -#define BITMAP64(VAR_NAME) MIH_C_BITMAP64_T VAR_NAME; -#define BITMAP128(VAR_NAME) MIH_C_BITMAP128_T VAR_NAME; -#define BITMAP256(VAR_NAME) MIH_C_BITMAP256_T VAR_NAME; - -//----------------------- CHOICE(DATATYPE1, DATATYPE2[,...]) ------------------ -/*! \var typedef u_int8_t MIH_C_CHOICE_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for u_int8_t. - */ -typedef u_int8_t MIH_C_CHOICE_T; - -//----------------------- INTEGER(size) --------------------------------------- -/*! \var typedef int8_t MIH_C_INTEGER1_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for int8_t. - */ -typedef int8_t MIH_C_INTEGER1_T; -/*! \var typedef int16_t MIH_C_INTEGER2_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for int16_t. - */ -typedef int16_t MIH_C_INTEGER2_T; -/*! \var typedef int32_t MIH_C_INTEGER4_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for int32_t. - */ -typedef int32_t MIH_C_INTEGER4_T; -/*! \var typedef int64_t MIH_C_INTEGER8_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for int64_t. - */ -typedef int64_t MIH_C_INTEGER8_T; - -#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C -/*! \def TYPEDEF_INTEGER1(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER1_T. - */ -#define TYPEDEF_INTEGER1(DATA_TYPE_NAME) typedef MIH_C_INTEGER1_T DATA_TYPE_NAME ## _T;\ - void MIH_C_INTEGER1_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER1_T* dataP);\ - void MIH_C_INTEGER1_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER1_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%02X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER1_encode(bbP, (MIH_C_INTEGER1_T*)dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER1_decode(bbP, (MIH_C_INTEGER1_T*)dataP);\ - }; - -/*! \def TYPEDEF_INTEGER2(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER2_T. - */ -#define TYPEDEF_INTEGER2(DATA_TYPE_NAME) typedef MIH_C_INTEGER2_T DATA_TYPE_NAME ## _T;\ - void MIH_C_INTEGER2_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER2_T* dataP);\ - void MIH_C_INTEGER2_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER2_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%04X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER2_encode(bbP, (MIH_C_INTEGER2_T*)dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER2_decode(bbP, (MIH_C_INTEGER2_T*)dataP);\ - }; - -/*! \def TYPEDEF_INTEGER4(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER4_T. - */ -#define TYPEDEF_INTEGER4(DATA_TYPE_NAME) typedef MIH_C_INTEGER4_T DATA_TYPE_NAME ## _T;\ - void MIH_C_INTEGER4_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER4_T* dataP);\ - void MIH_C_INTEGER4_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER4_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%08X", (MIH_C_INTEGER4_T)*dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER4_encode(bbP, (MIH_C_INTEGER4_T*)dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER4_decode(bbP, (MIH_C_INTEGER4_T*)dataP);\ - }; - -/*! \def TYPEDEF_INTEGER8(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER48T. - */ -#define TYPEDEF_INTEGER8(DATA_TYPE_NAME) typedef MIH_C_INTEGER8_T DATA_TYPE_NAME ## _T;\ - void MIH_C_INTEGER8_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER8_T* dataP);\ - void MIH_C_INTEGER8_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER8_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - unsigned int buffer_index = 0;\ - buffer_index = sprintf(buffP, "0x%08x", (MIH_C_UNSIGNED_INT4_T)(*dataP>>32));\ - buffer_index = sprintf(&buffP[buffer_index], "%08x", (MIH_C_UNSIGNED_INT4_T)(*dataP));\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER8_encode(bbP, (MIH_C_INTEGER8_T*)dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER8_decode(bbP, (MIH_C_INTEGER8_T*)dataP);\ - }; -#else -#define TYPEDEF_INTEGER1(DATA_TYPE_NAME) typedef MIH_C_INTEGER1_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - -#define TYPEDEF_INTEGER2(DATA_TYPE_NAME) typedef MIH_C_INTEGER2_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - -#define TYPEDEF_INTEGER4(DATA_TYPE_NAME) typedef MIH_C_INTEGER4_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - -#define TYPEDEF_INTEGER8(DATA_TYPE_NAME) typedef MIH_C_INTEGER8_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif - -/*! \def INTEGER1(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_INTEGER1_T. - */ -#define INTEGER1(VAR_NAME) MIH_C_INTEGER1_T VAR_NAME; -/*! \def INTEGER2(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_INTEGER2_T. - */ -#define INTEGER2(VAR_NAME) MIH_C_INTEGER2_T VAR_NAME; -/*! \def INTEGER4(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_INTEGER4_T. - */ -#define INTEGER4(VAR_NAME) MIH_C_INTEGER4_T VAR_NAME; -/*! \def INTEGER8(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_INTEGER8_T. - */ -#define INTEGER8(VAR_NAME) MIH_C_INTEGER8_T VAR_NAME; - - -//----------------------- UNSIGNED_INT(size) ---------------------------------- -/*! \var typedef int8_t MIH_C_UNSIGNED_INT1_T; - * \brief A type definition for int8_t. - */ -typedef u_int8_t MIH_C_UNSIGNED_INT1_T; -/*! \var u_int16_t MIH_C_UNSIGNED_INT2_T - * \brief A type definition for u_int16_t. - */ -typedef u_int16_t MIH_C_UNSIGNED_INT2_T; -/*! \var typedef u_int32_t MIH_C_UNSIGNED_INT4_T; - * \brief A type definition for u_int32_t. - */ -typedef u_int32_t MIH_C_UNSIGNED_INT4_T; -/*! \var u_int64_t MIH_C_UNSIGNED_INT8_T; - * \brief A type definition for u_int64_t. - */ -typedef u_int64_t MIH_C_UNSIGNED_INT8_T; - -#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C -/*! \def TYPEDEF_UNSIGNED_INT1(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT1_T. - */ -#define TYPEDEF_UNSIGNED_INT1(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT1_T DATA_TYPE_NAME ## _T;\ - void MIH_C_UNSIGNED_INT1_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT1_T* dataP);\ - void MIH_C_UNSIGNED_INT1_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT1_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%02X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT1_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT1_decode(bbP, dataP);\ - }; - -/*! \def TYPEDEF_UNSIGNED_INT2(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT2_T. - */ -#define TYPEDEF_UNSIGNED_INT2(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT2_T DATA_TYPE_NAME ## _T;\ - void MIH_C_UNSIGNED_INT2_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT2_T* dataP);\ - void MIH_C_UNSIGNED_INT2_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT2_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%04X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT2_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT2_decode(bbP, dataP);\ - }; - -/*! \def TYPEDEF_UNSIGNED_INT4(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT4_T. - */ -#define TYPEDEF_UNSIGNED_INT4(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT4_T DATA_TYPE_NAME ## _T;\ - void MIH_C_UNSIGNED_INT4_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT4_T* dataP);\ - void MIH_C_UNSIGNED_INT4_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT4_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%08X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT4_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT4_decode(bbP, dataP);\ - }; - -/*! \def TYPEDEF_UNSIGNED_INT8(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT8_T. - */ -#define TYPEDEF_UNSIGNED_INT8(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT8_T DATA_TYPE_NAME ## _T;\ - void MIH_C_UNSIGNED_INT8_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT8_T* dataP);\ - void MIH_C_UNSIGNED_INT8_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT8_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%16X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT8_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT8_decode(bbP, dataP);\ - }; -#else -#define TYPEDEF_UNSIGNED_INT1(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT1_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - -#define TYPEDEF_UNSIGNED_INT2(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT2_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - -#define TYPEDEF_UNSIGNED_INT4(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT4_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - -#define TYPEDEF_UNSIGNED_INT8(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT8_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif - -/*! \def UNSIGNED_INT1(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_UNSIGNED_INT1_T. - */ -#define UNSIGNED_INT1(VAR_NAME) MIH_C_UNSIGNED_INT1_T VAR_NAME; -/*! \def UNSIGNED_INT2(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_UNSIGNED_INT2_T. - */ -#define UNSIGNED_INT2(VAR_NAME) MIH_C_UNSIGNED_INT2_T VAR_NAME; -/*! \def UNSIGNED_INT4(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_UNSIGNED_INT4_T. - */ -#define UNSIGNED_INT4(VAR_NAME) MIH_C_UNSIGNED_INT4_T VAR_NAME; -/*! \def UNSIGNED_INT8(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_UNSIGNED_INT8_T. - */ -#define UNSIGNED_INT8(VAR_NAME) MIH_C_UNSIGNED_INT8_T VAR_NAME; - -//----------------------- LIST(DATATYPE) -------------------------------------- -void MIH_C_LIST_LENGTH_encode(Bit_Buffer_t *bbP, u_int16_t lengthP); -void MIH_C_LIST_LENGTH_decode(Bit_Buffer_t *bbP, u_int16_t *lengthP); -u_int16_t MIH_C_LIST_LENGTH_get_encode_length(u_int16_t lengthP); - -#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C -/*! \def TYPEDEF_LIST(DATA_TYPE_NAME, MAX_LENGTH) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a LIST of MAX_LENGTH elements of DATA_TYPE_NAME type, and its functions for de/serializing this type. - */ -#define TYPEDEF_LIST(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME ## _LIST { u_int16_t length; DATA_TYPE_NAME ## _T val[MAX_LENGTH];} DATA_TYPE_NAME ## _LIST_T;\ - extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *val);\ - extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *val);\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *val, char* bufP);\ - unsigned int DATA_TYPE_NAME ## _LIST2String(DATA_TYPE_NAME ## _LIST_T *listP, char* bufP) {\ - int index = 0;\ - unsigned int buffer_index = 0;\ - while ((index < listP->length) && (index < MAX_LENGTH)){\ - buffer_index += sprintf(&bufP[buffer_index], "%s (%d) = ", STR(DATA_TYPE_NAME) , index);\ - buffer_index += DATA_TYPE_NAME ## 2String(&listP->val[index], &bufP[buffer_index]);\ - buffer_index += sprintf(&bufP[buffer_index], " ");\ - index = index + 1;\ - }\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _LIST_decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP) {\ - int index = 0;\ - MIH_C_LIST_LENGTH_decode(bbP, &listP->length);\ - if (listP->length > MAX_LENGTH) {printf("[MIH_C] ERROR DATA_TYPE_NAME ## _LIST_decode num elements in list out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ - } else {\ - while ((index < listP->length) && (index < MAX_LENGTH)){\ - DATA_TYPE_NAME ## _decode(bbP, &listP->val[index++]);\ - }\ - }\ - };\ - void DATA_TYPE_NAME ## _LIST_encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP) {\ - int index = 0;\ - if (listP->length > MAX_LENGTH) {\ - printf("[MIH_C] ERROR DATA_TYPE_NAME ## _LIST_encode num elements in list out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ - } else {\ - MIH_C_LIST_LENGTH_encode(bbP, listP->length);\ - while (index < listP->length) {\ - DATA_TYPE_NAME ## _encode(bbP, &listP->val[index++]);\ - }\ - }\ - };\ - void DATA_TYPE_NAME ## _LIST_init(DATA_TYPE_NAME ## _LIST_T *listP) {\ - listP->length = 0;\ - memset(listP->val, 0, MAX_LENGTH*sizeof(DATA_TYPE_NAME ## _T));\ - }; - -#else -#define TYPEDEF_LIST(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME ## _LIST { u_int16_t length; DATA_TYPE_NAME ## _T val[MAX_LENGTH];} DATA_TYPE_NAME ## _LIST_T;\ - extern unsigned int DATA_TYPE_NAME ## _LIST2String(DATA_TYPE_NAME ## _LIST_T *listP, char* bufP);\ - extern void DATA_TYPE_NAME ## _LIST_decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP);\ - extern void DATA_TYPE_NAME ## _LIST_encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP);\ - extern void DATA_TYPE_NAME ## _LIST_init(DATA_TYPE_NAME ## _LIST_T *listP); -#endif -#define LIST(DATA_TYPE_NAME, VAR_NAME) DATA_TYPE_NAME ## _LIST_T VAR_NAME ## _list; - - - -//----------------------- NULL ------------------------------------------------ -#define MIH_C_NULL_T u_int8_t - -//----------------------- OCTET(size) ----------------------------------------- -#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C -/*! \def TYPEDEF_OCTET(DATA_TYPE_NAME, MAX_LENGTH) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a LIST of MAX_LENGTH octet elements, and its functions for de/serializing this type. - */ -#define TYPEDEF_OCTET(DATA_TYPE_NAME, LENGTH) typedef struct DATA_TYPE_NAME {u_int8_t val[LENGTH];} DATA_TYPE_NAME ## _T;\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP) {\ - int index = 0;\ - unsigned int buffer_index = 0;\ - while ( index < LENGTH ){\ - buffer_index += sprintf(&bufP[buffer_index], "%02X", dataP->val[index]);\ - index = index + 1;\ - }\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) { BitBuffer_readMem(bbP, &dataP->val[0], LENGTH);};\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) { BitBuffer_writeMem(bbP, &dataP->val[0], LENGTH);}; -#else -#define TYPEDEF_OCTET(DATA_TYPE_NAME, LENGTH) typedef struct DATA_TYPE_NAME {u_int8_t val[LENGTH];} DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP);\ - extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif - -//----------------------- SEQUENCE(DATATYPE1, DATATYPE2[,...]) : NO MACRO ----- - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.2 General data types -//----------------------------------------------------------------------------- - -//----------------------- ENUMERATED ------------------------------------------ -TYPEDEF_UNSIGNED_INT1(MIH_C_ENUMERATED) - -#ifdef MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C -/*! \def TYPEDEF_ENUMERATED(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as MIH_C_ENUMERATED_T, and its functions for de/serializing this type. - */ -#define TYPEDEF_ENUMERATED(DATA_TYPE_NAME) typedef MIH_C_ENUMERATED_T DATA_TYPE_NAME ## _T;\ - void MIH_C_ENUMERATED_encode(Bit_Buffer_t* bbP, MIH_C_ENUMERATED_T* dataP);\ - void MIH_C_ENUMERATED_decode(Bit_Buffer_t* bbP, MIH_C_ENUMERATED_T* dataP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_ENUMERATED_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {MIH_C_ENUMERATED_decode(bbP, dataP);}; -#else -#define TYPEDEF_ENUMERATED(DATA_TYPE_NAME) typedef MIH_C_ENUMERATED_T DATA_TYPE_NAME ## _T;\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif - -/*! \def ENUMERATED(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_ENUMERATED_T. - */ -#define ENUMERATED(VAR_NAME) MIH_C_ENUMERATED_T VAR_NAME; - - -//----------------------- BOOLEAN --------------------------------------------- -TYPEDEF_ENUMERATED(MIH_C_BOOLEAN) - -#define MIH_C_BOOLEAN_TRUE (MIH_C_ENUMERATED_T)1 -#define MIH_C_BOOLEAN_FALSE (MIH_C_ENUMERATED_T)0 -#ifdef MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C -/*! \def TYPEDEF_BOOLEAN(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as MIH_C_BOOLEAN_T, and its functions for de/serializing this type. - */ -#define TYPEDEF_BOOLEAN(DATA_TYPE_NAME) typedef MIH_C_BOOLEAN_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BOOLEAN_encode(Bit_Buffer_t* bbP, MIH_C_BOOLEAN_T* dataP);\ - void MIH_C_BOOLEAN_decode(Bit_Buffer_t* bbP, MIH_C_BOOLEAN_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP) {\ - unsigned int buffer_index = 0;\ - if (*dataP != MIH_C_BOOLEAN_FALSE) {\ - buffer_index += sprintf(&bufP[buffer_index], "TRUE");\ - } else {\ - buffer_index += sprintf(&bufP[buffer_index], "FALSE");\ - }\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_BOOLEAN_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {MIH_C_ENUMERATED_decode(bbP, dataP);}; -#else -#define TYPEDEF_BOOLEAN(DATA_TYPE_NAME) typedef MIH_C_BOOLEAN_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif - -/*! \def BOOLEAN(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_BOOLEAN_T. - */ -#define BOOLEAN(VAR_NAME) MIH_C_BOOLEAN_T VAR_NAME; - - -//----------------------- OCTET_STRING ---------------------------------------- -#ifdef MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C -/*! \def TYPEDEF_OCTET_STRING(DATA_TYPE_NAME, MAX_LENGTH) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a LIST of MAX_LENGTH char elements, and its functions for de/serializing this type. - */ -#define TYPEDEF_OCTET_STRING(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME { u_int16_t length; u_int8_t val[MAX_LENGTH];} DATA_TYPE_NAME ## _T;\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *listP, char* bufP) {\ - memcpy(bufP, listP->val, listP->length);\ - bufP[listP->length] = 0;\ - return listP->length;\ - };\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP) {\ - MIH_C_LIST_LENGTH_decode(bbP, &listP->length);\ - if (listP->length > MAX_LENGTH) {printf("[MIH_C] ERROR DATA_TYPE_NAME ## _decode String length out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ - } else {\ - BitBuffer_readMem(bbP, listP->val, listP->length);\ - }\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP) {\ - if (listP->length > MAX_LENGTH) {\ - printf("[MIH_C] ERROR DATA_TYPE_NAME ## _encode String length out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ - } else {\ - MIH_C_LIST_LENGTH_encode(bbP, listP->length);\ - BitBuffer_writeMem(bbP, listP->val, listP->length);\ - }\ - };\ - void DATA_TYPE_NAME ## _set(DATA_TYPE_NAME ## _T *octet_strP, u_int8_t* strP, u_int16_t lengthP) {\ - if (lengthP > MAX_LENGTH) {\ - printf("[MIH_C] ERROR DATA_TYPE_NAME ## _set String length out of bounds\n");\ - octet_strP->length = 0;\ - } else {\ - octet_strP->length = lengthP;\ - if (strP != NULL) {\ - memcpy((char *)octet_strP->val, (char *)strP, lengthP);\ - } else {\ - memset((char *)octet_strP->val, 0, lengthP);\ - }\ - }\ - }; -#else -#define TYPEDEF_OCTET_STRING(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME { u_int16_t length; u_int8_t val[MAX_LENGTH];} DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *listP, char* bufP);\ - extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP);\ - extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP);\ - extern void DATA_TYPE_NAME ## _set(DATA_TYPE_NAME ## _T *octet_strP, u_int8_t* strP, u_int16_t lengthP); -#endif - - -//----------------------- PERCENTAGE ------------------------------------------ -TYPEDEF_UNSIGNED_INT1(MIH_C_PERCENTAGE); -/*! \var PERCENTAGE(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines VAR_NAME as MIH_C_PERCENTAGE_T. - */ -#define PERCENTAGE(VAR_NAME) MIH_C_PERCENTAGE_T VAR_NAME; - -//----------------------- STATUS ---------------------------------------------- -TYPEDEF_ENUMERATED(MIH_C_STATUS); -#define MIH_C_STATUS_SUCCESS (MIH_C_STATUS_T)0 -#define MIH_C_STATUS_UNSPECIFIED_FAILURE (MIH_C_STATUS_T)1 -#define MIH_C_STATUS_REJECTED (MIH_C_STATUS_T)2 -#define MIH_C_STATUS_AUTHORIZATION_FAILURE (MIH_C_STATUS_T)3 -#define MIH_C_STATUS_NETWORK_ERROR (MIH_C_STATUS_T)4 - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.3 Data types for addresses -//----------------------------------------------------------------------------- -/*! \var MIH_C_UNSIGNED_INT4_T MIH_C_CELL_ID_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief This data type identifies a cell uniquely within 3GPP UTRAN and -* consists of radio network controller (RNC)-ID and C-ID as defined in -* 3GPP TS 25.401. -* Valid Range: 0..268435455. -*/ -TYPEDEF_UNSIGNED_INT4(MIH_C_CELL_ID) -//------------------------------------------- -/*! -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief The BSS and cell within the BSS are identified by Cell Identity (CI). -* See 3GPP TS 23.003. -*/ -TYPEDEF_OCTET(MIH_C_CI, 2) -//------------------------------------------- -/*! -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief The public land mobile network (PLMN) unique identifier. -* PLMN_ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC). -* This is to represent the access network identifier. -* Coding of PLMN_ID is defined in 3GPP TS 25.413. -*/ -TYPEDEF_OCTET(MIH_C_PLMN_ID, 3) -//------------------------------------------- -/*! -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief Location Area Code (LAC) is a fixed length code (of 2 octets) -* identifying a location area within a public landmobile network (PLMN). -* See 3GPP TS 23.003. -*/ -TYPEDEF_OCTET(MIH_C_LAC, 2) -//------------------------------------------- -/*! \struct MIH_C_3GPP_2G_CELL_ID -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent a 3GPP 2G cell identifier. -*/ -typedef struct MIH_C_3GPP_2G_CELL_ID { - MIH_C_PLMN_ID_T plmn_id; - MIH_C_LAC_T lac; - MIH_C_CI_T ci; -} MIH_C_3GPP_2G_CELL_ID_T; - -//------------------------------------------- -/*! \struct MIH_C_3GPP_3G_CELL_ID -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent a 3GPP 3G cell identifier. -*/ -typedef struct MIH_C_3GPP_3G_CELL_ID { - MIH_C_PLMN_ID_T plmn_id; - MIH_C_CELL_ID_T cell_id; -} MIH_C_3GPP_3G_CELL_ID_T; -//------------------------------------------- -/*! \struct MIH_C_3GPP_ADDR -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent a 3GPP transport address. -*/ -TYPEDEF_OCTET_STRING(MIH_C_3GPP_ADDR, MIH_C_3GPP_ADDR_LENGTH) -//------------------------------------------- -/*! \struct MIH_C_3GPP2_ADDR -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent a 3GPP2 transport address. -*/ -TYPEDEF_OCTET_STRING(MIH_C_3GPP2_ADDR, MIH_C_3GPP2_ADDR_LENGTH) -//------------------------------------------- -/*! \var MIH_C_IANA_ADDR_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief Is the address family type of a transport address. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_IANA_ADDR) -//------------------------------------------- -/*! \struct MIH_C_TRANSPORT_ADDR_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A type to represent a transport address. The -* UNSIGNED_INT(2) is the address type defined in -* http://www.iana.org/assignments/address-family-numbers. -*/ -TYPEDEF_OCTET_STRING(MIH_C_TRANSPORT_ADDR_VALUE, 128) -//------------------------------------------- -#ifdef MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC_C -#define TYPEDEF_TRANSPORT_ADDR(DATA_TYPE_NAME) typedef struct DATA_TYPE_NAME {\ - MIH_C_IANA_ADDR_T address_family;\ - MIH_C_TRANSPORT_ADDR_VALUE_T address;\ - } DATA_TYPE_NAME ## _T;\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP) {\ - unsigned int buffer_index = 0;\ - buffer_index += sprintf(&bufP[buffer_index], "IANA = ");\ - buffer_index += MIH_C_IANA_ADDR2String(&dataP->address_family, &bufP[buffer_index]);\ - buffer_index += sprintf(&bufP[buffer_index], "TRANSPORT_ADDR = ");\ - buffer_index += MIH_C_TRANSPORT_ADDR_VALUE2String(&dataP->address, &bufP[buffer_index]);\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_IANA_ADDR_decode(bbP, &dataP->address_family);\ - MIH_C_TRANSPORT_ADDR_VALUE_decode(bbP, &dataP->address);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_IANA_ADDR_encode(bbP, &dataP->address_family);\ - MIH_C_TRANSPORT_ADDR_VALUE_encode(bbP, &dataP->address);\ - }; -#else -#define TYPEDEF_TRANSPORT_ADDR(DATA_TYPE_NAME) typedef struct DATA_TYPE_NAME {\ - MIH_C_IANA_ADDR_T address_family;\ - MIH_C_TRANSPORT_ADDR_VALUE_T address;\ - } DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP);\ - extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif -//------------------------------------------- -/*! \struct MIH_C_IP_ADDR_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief Represents an IP address. The Address Type is either 1 (IPv4) or 2 (IPv6). -*/ -//typedef MIH_C_TRANSPORT_ADDR_T MIH_C_IP_ADDR_T; -TYPEDEF_TRANSPORT_ADDR(MIH_C_IP_ADDR) -//------------------------------------------- -/*! \struct MIH_C_MAC_ADDR_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief Represents a MAC address. The Address Type contains the one used for a specific link layer. -*/ -//typedef MIH_C_TRANSPORT_ADDR_T MIH_C_MAC_ADDR_T; -TYPEDEF_TRANSPORT_ADDR(MIH_C_MAC_ADDR) -//------------------------------------------- -/*! \struct MIH_C_OTHER_L2_ADDR_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent a link-layer address other than the address already defined. -* For example, SSID. -*/ -TYPEDEF_OCTET_STRING(MIH_C_OTHER_L2_ADDR, MIH_C_OTHER_L2_ADDR_LENGTH) -//------------------------------------------- - -typedef enum { - MIH_C_CHOICE_MAC_ADDR = 0, - MIH_C_CHOICE_3GPP_3G_CELL_ID, - MIH_C_CHOICE_3GPP_2G_CELL_ID, - MIH_C_CHOICE_3GPP_ADDR, - MIH_C_CHOICE_3GPP2_ADDR, - MIH_C_CHOICE_OTHER_L2_ADDR -} MIH_C_LINK_ADDR_CHOICE_ENUM_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_ADDR -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent an address of any link layer. -*/ -typedef struct MIH_C_LINK_ADDR { - MIH_C_CHOICE_T choice; - union { - MIH_C_MAC_ADDR_T mac_addr; - MIH_C_3GPP_3G_CELL_ID_T _3gpp_3g_cell_id; - MIH_C_3GPP_2G_CELL_ID_T _3gpp_2g_cell_id; - MIH_C_3GPP_ADDR_T _3gpp_addr; - MIH_C_3GPP2_ADDR_T _3gpp2_addr; - MIH_C_OTHER_L2_ADDR_T other_l2_addr; - } _union; -} MIH_C_LINK_ADDR_T; - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.4 Data types for links (MAINLY because of precedence definition) -//----------------------------------------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents percentage of battery charge remaining. - -*/ -TYPEDEF_INTEGER1(MIH_C_BATT_LEVEL) -//------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Channel identifier as defined in the specific link technology (e.g., standards -* development organization (SDO)). -* Valid Range: 0..65535 -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_CHANNEL_ID) -//------------------------------------------- -#define MIH_C_CONFIG_STATUS_SUCCESS MIH_C_BOOLEAN_TRUE -#define MIH_C_CONFIG_STATUS_ERROR MIH_C_BOOLEAN_FALSE -/*! \var MIH_C_CONFIG_STATUS_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The status of link parameter configuration. -* TRUE: Success -* FALSE: Error -*/ -TYPEDEF_BOOLEAN(MIH_C_CONFIG_STATUS) -//------------------------------------------- -/*! \var MIH_C_DEVICE_INFO_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A non-NULL terminated string whose length shall not exceed 253 octets, representing -* information on manufacturer, model number, revision number of the software/firmware -* and serial number in displayable text. -*/ -TYPEDEF_OCTET_STRING(MIH_C_DEVICE_INFO, 253) -//------------------------------------------- -#define MIH_C_BIT_DEVICE_INFO MIH_C_BIT_0_VALUE -#define MIH_C_BIT_BATT_LEVEL MIH_C_BIT_1_VALUE -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A list of device status request. -* Bitmap Values: -* Bit 0: DEVICE_INFO -* Bit 1: BATT_LEVEL -* Bit 2–15: (Reserved) -*/ -TYPEDEF_BITMAP16(MIH_C_DEV_STATES_REQ) -//------------------------------------------- -/*! \struct MIH_C_DEV_STATE_RSP_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents a device status. -*/ -typedef struct MIH_C_DEV_STATE_RSP { - MIH_C_CHOICE_T choice; - union { - MIH_C_DEVICE_INFO_T device_info; - MIH_C_BATT_LEVEL_T batt_level; - } _union; -} MIH_C_DEV_STATE_RSP_T; -//------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Time (in ms) to elapse before an action needs to be taken. A value of 0 indicates -* that the action will be taken immediately. Time elapsed will be calculated from the -* instance the command arrives until the time when the execution of the action is carried out. -* Valid Range: 0..65535 -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_LINK_AC_EX_TIME) -//------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Link action result. -* 0: Success -* 1: Failure -* 2: Refused -* 3: Incapable -*/ -TYPEDEF_ENUMERATED(MIH_C_LINK_AC_RESULT) -#define MIH_C_LINK_AC_RESULT_SUCCESS (MIH_C_LINK_AC_RESULT_T)0 -#define MIH_C_LINK_AC_RESULT_FAILURE (MIH_C_LINK_AC_RESULT_T)1 -#define MIH_C_LINK_AC_RESULT_REFUSED (MIH_C_LINK_AC_RESULT_T)2 -#define MIH_C_LINK_AC_RESULT_INCAPABLE (MIH_C_LINK_AC_RESULT_T)3 -//------------------------------------------- -#define MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN MIH_C_BIT_0_VALUE -#define MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN MIH_C_BIT_1_VALUE -#define MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ MIH_C_BIT_2_VALUE -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Link action attribute that can be executed along with a valid link action. -* Detail description of each attribute is in Table F.6. -* Bitmap Values: -* Bit 0: LINK_SCAN -* Bit 1: LINK_RES_RETAIN -* Bit 2: DATA_FWD_REQ -* Bit 3–7: (Reserved) -*/ -TYPEDEF_BITMAP8(MIH_C_LINK_AC_ATTR) -//------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief An action for a link. The meaning of each link action is defined in Table F.5. -* 0: NONE -* 1: LINK_DISCONNECT -* 2: LINK_LOW_POWER -* 3: LINK_POWER_DOWN -* 4: LINK_POWER_UP -* 5–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_AC_TYPE) -#define MIH_C_LINK_AC_TYPE_NONE (MIH_C_LINK_AC_TYPE_T)0 -#define MIH_C_LINK_AC_TYPE_LINK_DISCONNECT (MIH_C_LINK_AC_TYPE_T)1 -#define MIH_C_LINK_AC_TYPE_LINK_LOW_POWER (MIH_C_LINK_AC_TYPE_T)2 -#define MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN (MIH_C_LINK_AC_TYPE_T)3 -#define MIH_C_LINK_AC_TYPE_LINK_POWER_UP (MIH_C_LINK_AC_TYPE_T)4 -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -#define MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR (MIH_C_LINK_AC_TYPE_T)5 -#define MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES (MIH_C_LINK_AC_TYPE_T)6 -#define MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES (MIH_C_LINK_AC_TYPE_T)7 -#endif -//------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents the link type.a -* Number assignments: -* 0: Reserved -* 1: Wireless - GSM -* 2: Wireless - GPRS -* 3: Wireless - EDGE -* 15: Ethernet -* 18: Wireless - Other -* 19: Wireless - IEEE 802.11 -* 22: Wireless - CDMA2000 -* 23: Wireless - UMTS -* 24: Wireless - cdma2000-HRPD -* 25: Wireless - LTE (MEDIEVAL) -* 27: Wireless - IEEE 802.16 -* 28: Wireless - IEEE 802.20 -* 29: Wireless - IEEE 802.22 -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_TYPE) -#define MIH_C_WIRELESS_GSM (MIH_C_LINK_TYPE_T)1 -#define MIH_C_WIRELESS_GPRS (MIH_C_LINK_TYPE_T)2 -#define MIH_C_WIRELESS_EDGE (MIH_C_LINK_TYPE_T)3 -#define MIH_C_ETHERNET (MIH_C_LINK_TYPE_T)15 -#define MIH_C_WIRELESS_OTHER (MIH_C_LINK_TYPE_T)18 -#define MIH_C_WIRELESS_IEEE802_11 (MIH_C_LINK_TYPE_T)19 -#define MIH_C_WIRELESS_CDMA_2000 (MIH_C_LINK_TYPE_T)22 -//#define MIH_C_WIRELESS_UMTS (MIH_C_LINK_TYPE_T)23 -// Temp - MW modified to test LTE for MEDIEVAL -#define MIH_C_WIRELESS_UMTS (MIH_C_LINK_TYPE_T)25 -#define MIH_C_WIRELESS_CDMA_2000_HRPD (MIH_C_LINK_TYPE_T)24 -#define MIH_C_WIRELESS_LTE (MIH_C_LINK_TYPE_T)25 -#define MIH_C_WIRELESS_IEEE802_16 (MIH_C_LINK_TYPE_T)27 -#define MIH_C_WIRELESS_IEEE802_20 (MIH_C_LINK_TYPE_T)28 -#define MIH_C_WIRELESS_IEEE802_22 (MIH_C_LINK_TYPE_T)29 -//------------------------------------------- -/*! \struct MIH_C_LINK_ID_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The identifier of a link that is not associated with the peer node. -* The LINK_ADDR contains the address of this link. -*/ -typedef struct MIH_C_LINK_ID { - MIH_C_LINK_TYPE_T link_type; - MIH_C_LINK_ADDR_T link_addr; -} MIH_C_LINK_ID_T; -//------------------------------------------- -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -/*! \var MIH_C_PORT_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief 2 octets defining the port used by the transport protocol -*/ -TYPEDEF_OCTET(MIH_C_PORT, 2) -//------------------------------------------- -/*! \struct MIH_C_IP_TUPLE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief Tuple consisting on an IP address and the port -*/ -typedef struct MIH_C_IP_TUPLE { - MIH_C_IP_ADDR_T ip_addr; - MIH_C_PORT_T port; -} MIH_C_IP_TUPLE_T; -//------------------------------------------- -/*! \var MIH_C_PROTO_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief The transport protocol used: -* 0: TCP -* 1: UDP -*/ -TYPEDEF_ENUMERATED(MIH_C_PROTO) -#define MIH_C_PROTO_TCP (MIH_C_PROTO_T)0 -#define MIH_C_PROTO_UDP (MIH_C_PROTO_T)1 -//------------------------------------------- -/*! \struct MIH_C_FLOW_ID_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief Five tuple, consisting on the source and destination address -* and ports plus the transport protocol used. -*/ -/*typedef struct MIH_C_FLOW_ID { - MIH_C_IP_TUPLE_T source_addr; - MIH_C_IP_TUPLE_T dest_addr; - MIH_C_PROTO_T transport_protocol; -} MIH_C_FLOW_ID_T;*/ -TYPEDEF_UNSIGNED_INT4(MIH_C_FLOW_ID) -//------------------------------------------- -/*! \struct MIH_C_MARK_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief 6 Bits (IPv4) or 20 Bits (IPv6) mask to be applied to the DSCP -* or Flow Label field of IPv4/v6 header. -*/ -typedef struct MIH_C_MARK { - MIH_C_CHOICE_T choice; - union { - BITMAP6(dscp_mask); - BITMAP20(flow_label_mask); - } _union; -} MIH_C_MARK_T; -//------------------------------------------- -/*! \var MIH_C_MAX_DELAY_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief Maximum delay supported by the flow in ms. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_MAX_DELAY) -//------------------------------------------- -/*! \var MIH_C_BITRATE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief A type to represent the maximum data rate in kb/s. -* Valid Range: 0 –– 2^32 – 1 - -*/ -TYPEDEF_UNSIGNED_INT4(MIH_C_BITRATE) -//------------------------------------------- -/*! \var MIH_C_JITTER_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief A type to represent the packet transfer delay jitter in ms. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_JITTER) -//------------------------------------------- -/*! \var MIH_C_PKT_LOSS_RATE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief A type to represent the packet loss rate. The loss rate is equal -* to the integer part of the result of multiplying --100 times the -* log10 of the ratio between the number of packets lost and the -* total number of packets transmitted. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_PKT_LOSS_RATE) -//------------------------------------------- -/*! \var MIH_C_COS_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief COS Class to be used for queuing. -* To be filled for LTE and WLAN -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_COS) -//------------------------------------------- -/*! \var MIH_C_DROP_ELIGIBILITY_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief 0 means the frames are not eligible to discarding. -* 1 means frames are eligible for discarding. -*/ -TYPEDEF_BOOLEAN(MIH_C_DROP_ELIGIBILITY) -//------------------------------------------- -/*! \var MIH_C_MULTICAST_ENABLE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief Identifies if a flow is multicast. -* 0: is not multicast -* 1: is multicast -*/ -TYPEDEF_BOOLEAN(MIH_C_MULTICAST_ENABLE) -//------------------------------------------- -/*! \var MIH_C_JUMBO_ENABLE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief Identifies if JUMBO must be activated -* 0: Deactivate Jumbo -* 1: Activate Jumbo -*/ -TYPEDEF_BOOLEAN(MIH_C_JUMBO_ENABLE) -#endif -//------------------------------------------- -/*! \var MIH_C_LINK_DATA_RATE_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent the maximum data rate in kb/s. -* Valid Range: 0 – 232–1 -*/ -TYPEDEF_UNSIGNED_INT4(MIH_C_LINK_DATA_RATE) -//------------------------------------------- -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -/*! \struct MIH_C_QOS_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief The choice of delay and bitrate corresponds to a new flow being -* signalled through the MIH_SAP, the COS parameter is used after being processed by the WP3 AQM. -*/ -typedef struct MIH_C_QOS { - MIH_C_CHOICE_T choice; - union { - struct { - MIH_C_MAX_DELAY_T max_delay; - MIH_C_BITRATE_T bitrate; - MIH_C_JITTER_T jitter; - MIH_C_PKT_LOSS_RATE_T pkt_loss; - } mark_qos; - MIH_C_COS_T cos; - } _union; -} MIH_C_QOS_T; -//------------------------------------------- -/*! \struct MIH_C_RESOURCE_DESC_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief The choice of RESOURCE_DESC is used when the LINK_ACTIVATE_RESOURCES -* or DEACTIVATE action is selected in order to identify and -* configure the flow subject to action -*/ -typedef struct MIH_C_RESOURCE_DESC { - MIH_C_LINK_ID_T link_id; - MIH_C_FLOW_ID_T flow_id; - MIH_C_CHOICE_T choice_link_data_rate; - union { - MIH_C_NULL_T null_attr; - MIH_C_LINK_DATA_RATE_T link_data_rate; - } _union_link_data_rate; - MIH_C_CHOICE_T choice_qos; - union { - MIH_C_NULL_T null_attr; - MIH_C_QOS_T qos; - } _union_qos; - MIH_C_CHOICE_T choice_jumbo_enable; - union { - MIH_C_NULL_T null_attr; - MIH_C_JUMBO_ENABLE_T jumbo_enable; - } _union_jumbo_enable; - MIH_C_CHOICE_T choice_multicast_enable; - union { - MIH_C_NULL_T null_attr; - MIH_C_MULTICAST_ENABLE_T multicast_enable; - } _union_multicast_enable; -} MIH_C_RESOURCE_DESC_T; -//------------------------------------------- -/*! \struct MIH_C_FLOW_ATTRIBUTE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief The choice of FLOW_ATTRIBUTE is used when the FLOW_ATTR action is -* selected in order to provide the mark and multicast configuration -* to be set up for the flow. -*/ -typedef struct MIH_C_FLOW_ATTRIBUTE { - MIH_C_FLOW_ID_T flow_id; - MIH_C_CHOICE_T choice_multicast_enable; - union { - MIH_C_NULL_T null_attr; - MIH_C_MULTICAST_ENABLE_T multicast_enable; - } _union_multicast_enable; - MIH_C_CHOICE_T choice_mark_qos; - union { - MIH_C_NULL_T null_attr; - struct { - MIH_C_MARK_T mark; - MIH_C_QOS_T qos; - } mark_qos; - } _union_mark_qos; - MIH_C_CHOICE_T choice_mark_drop_eligibility; - union { - MIH_C_NULL_T null_attr; - struct { - MIH_C_MARK_T mark; - MIH_C_DROP_ELIGIBILITY_T drop_eligibility; - } mark_drop_eligibility; - } _union_mark_drop_eligibility; - -} MIH_C_FLOW_ATTRIBUTE_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_AC_PARAM_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief The choice of FLOW_ATTRIBUTE is used when the FLOW_ATTR action is selected -* in order to provide the mark and multicast configuration to be set up for the flow. -* The choice of RESOURCE_DESC is used when LINK_ACTIVATE_RESOURCES or -* LINK_DEACTIVATE_RESOURCES actions are used. -*/ -typedef struct MIH_C_LINK_AC_PARAM { - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - MIH_C_FLOW_ATTRIBUTE_T flow_attribute; - MIH_C_RESOURCE_DESC_T resource_desc; - } _union; -} MIH_C_LINK_AC_PARAM_T; -#endif -//------------------------------------------- -/*! \struct MIH_C_LINK_ACTION_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Link action. -*/ -typedef struct MIH_C_LINK_ACTION { - MIH_C_LINK_AC_TYPE_T link_ac_type; - MIH_C_LINK_AC_ATTR_T link_ac_attr; -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - MIH_C_LINK_AC_PARAM_T link_ac_param; /*!< \brief extension of MEDIEVAL PROJECT */ -#endif -} MIH_C_LINK_ACTION_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_ACTION_REQ_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A set of handover action request parameters. The choice of LINK_ADDR is to -* provide PoA address information when the LINK_ACTION contains the attribute for DATA_FWD_REQ. -*/ -typedef struct MIH_C_LINK_ACTION_REQ { - MIH_C_LINK_ID_T link_id; - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - MIH_C_LINK_ADDR_T link_addr; - } _union; - - MIH_C_LINK_ACTION_T link_action; - MIH_C_LINK_AC_EX_TIME_T link_action_ex_time; -} MIH_C_LINK_ACTION_REQ_T; -//------------------------------------------- -/*! \struct MIH_C_SIG_STRENGTH_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents the signal strength in dBm unit or its relative value in an arbitrary percentage scale. -*/ -typedef struct MIH_C_SIG_STRENGTH { - MIH_C_CHOICE_T choice; - union { - INTEGER1(dbm) - PERCENTAGE(percentage) - } _union; -} MIH_C_SIG_STRENGTH_T; -#define MIH_C_SIG_STRENGTH_CHOICE_DBM (MIH_C_CHOICE_T)0 -#define MIH_C_SIG_STRENGTH_CHOICE_PERCENTAGE (MIH_C_CHOICE_T)1 -//------------------------------------------- -/*! \var MIH_C_NETWORK_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent a network identifier. -* A non-NULL terminated string whose length shall not exceed 253 octets. -*/ -TYPEDEF_OCTET_STRING(MIH_C_NETWORK_ID, 253) -//------------------------------------------- -/*! \struct MIH_C_LINK_SCAN_RSP_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents a scan response. The LINK_ADDR contains the PoA link address. -* The PoA belongs to the NETWORK_ID with the given SIG_STRENGTH. -*/ -typedef struct MIH_C_LINK_SCAN_RSP { - MIH_C_LINK_ADDR_T link_addr; - MIH_C_NETWORK_ID_T network_id; - MIH_C_SIG_STRENGTH_T sig_strength; -} MIH_C_LINK_SCAN_RSP_T; -//------------------------------------------- -/*! \var MIH_C_LINK_SCAN_RSP_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_SCAN_RSP, MIH_C_LINK_SCAN_RSP_LENGTH) -//------------------------------------------- -/*! \struct MIH_C_LINK_ACTION_RSP_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A set of link action returned results. -*/ -typedef struct MIH_C_LINK_ACTION_RSP { - MIH_C_LINK_ID_T link_id; - MIH_C_LINK_AC_RESULT_T link_ac_result; - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - LIST(MIH_C_LINK_SCAN_RSP, link_scan_rsp) - } _union; -} MIH_C_LINK_ACTION_RSP_T; -//------------------------------------------- -#define MIH_C_BIT_LINK_EVENT_SUBSCRIBE MIH_C_BIT_1_VALUE -#define MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE MIH_C_BIT_2_VALUE -#define MIH_C_BIT_LINK_GET_PARAMETERS MIH_C_BIT_3_VALUE -#define MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS MIH_C_BIT_4_VALUE -#define MIH_C_BIT_LINK_ACTION MIH_C_BIT_5_VALUE -/*! \var MIH_C_LINK_CMD_LIST_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A list of link commands. -* Bitmap Values: -* Bit 0: Reserved -* Bit 1: Link_Event_Subscribe -* Bit 2: Link_Event_Unsubscribe -* Bit 3: Link_Get_Parameters -* Bit 4: Link_Configure_Thresholds -* Bit 5: Link_Action -* Bit 6-31: (Reserved) -*/ -TYPEDEF_BITMAP32(MIH_C_LINK_CMD_LIST) -//------------------------------------------- -/*! \var MIH_C_TH_ACTION_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief -* 0: Set normal threshold -* 1: Set one-shot threshold -* 2: Cancel threshold -*/ -TYPEDEF_ENUMERATED(MIH_C_TH_ACTION) -#define MIH_C_SET_NORMAL_THRESHOLD (MIH_C_TH_ACTION_T)0 -#define MIH_C_SET_ONE_SHOT_THRESHOLD (MIH_C_TH_ACTION_T)1 -#define MIH_C_CANCEL_THRESHOLD (MIH_C_TH_ACTION_T)2 -//------------------------------------------- -/*! \var MIH_C_THRESHOLD_VAL_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Threshold value. The format of the media-dependent value is defined in the -* respective media specification standard and the equivalent number of bits (i.e., -* first bits) of this data type is used. In case that there are remaining unused bits -* in the data type, these are marked as all-zeros (‘0’). -* Valid Range: 0..65535 -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_THRESHOLD_VAL) - -//------------------------------------------- -/*! \var MIH_C_THRESHOLD_XDIR_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The direction the threshold is to be crossed. -* 0: ABOVE_THRESHOLD -* 1: BELOW_THRESHOLD -* 2–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_THRESHOLD_XDIR) -#define MIH_C_ABOVE_THRESHOLD (MIH_C_THRESHOLD_XDIR_T)0 -#define MIH_C_BELOW_THRESHOLD (MIH_C_THRESHOLD_XDIR_T)1 -//------------------------------------------- -/*! \struct MIH_C_THRESHOLD_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A link threshold. The threshold is considered crossed when the value of the -* link parameter passes the threshold in the specified direction. -*/ -typedef struct MIH_C_THRESHOLD { - MIH_C_THRESHOLD_VAL_T threshold_val; - MIH_C_THRESHOLD_XDIR_T threshold_xdir; -} MIH_C_THRESHOLD_T; -//------------------------------------------- -/*! \var MIH_C_TIMER_INTERVAL_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief This timer value (ms) is used to set the interval between periodic reports. -* Valid Range: 0..65535 -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_TIMER_INTERVAL) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_GEN_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a generic link parameter that is applicable to any link type. -* 0: Data Rate—the parameter value is represented as a DATA_RATE. -* 1: Signal Strength—the parameter value is represented as a SIG_STRENGTH. -* 2: Signal over interference plus noise ratio (SINR)—the parameter value is -* represented as an UNSIGNED_INT(2). -* 3:Throughput (the number of bits successfully received divided by the time it -* took to transmit them over the medium)—the parameter value is represented as -* an UNSIGNED_INT(2). -* 4: Packet Error Rate (representing the ratio between the number of frames received -* in error and the total number of frames transmitted in a link population of interest) -* the parameter value is represented as a PERCENTAGE. -* 5–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_GEN) -#define MIH_C_LINK_PARAM_GEN_DATA_RATE (MIH_C_LINK_PARAM_GEN_T)0 -#define MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH (MIH_C_LINK_PARAM_GEN_T)1 -#define MIH_C_LINK_PARAM_GEN_SINR (MIH_C_LINK_PARAM_GEN_T)2 -#define MIH_C_LINK_PARAM_GEN_THROUGHPUT (MIH_C_LINK_PARAM_GEN_T)3 -#define MIH_C_LINK_PARAM_GEN_PACKET_ERROR_RATE (MIH_C_LINK_PARAM_GEN_T)4 -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_QOS_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent QOS_LIST parameters. -* 0: Maximum number of differentiable classes of service supported. -* 1: Minimum packet transfer delay for all CoS, the minimum delay over a class -* population of interest. -* 2: Average packet transfer delay for all CoS, the arithmetic mean of the delay -* over a class population of interest. (See B.3.4) -* 3: Maximum packet transfer delay for all CoS, the maximum delay over a class -* population of interest. -* 4: Packet transfer delay jitter for all CoS, the standard deviation of the delay -* over a class population of interest. (See B.3.5.) -* 5: Packet loss rate for all CoS, the ratio between the number of frames that are -* transmitted but not received and the total number of frames transmitted over -* a class population of interest. (See B.3.2.) -* 6–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_QOS) -#define MIH_C_LINK_PARAM_QOS_MAX_NUM_DIF_COS_SUPPORTED (MIH_C_LINK_PARAM_QOS_T)0 -#define MIH_C_LINK_PARAM_QOS_MIN_PACKET_TRANSFER_DELAY_ALL_COS (MIH_C_LINK_PARAM_QOS_T)1 -#define MIH_C_LINK_PARAM_QOS_AVG_PACKET_TRANSFER_DELAY_ALL_COS (MIH_C_LINK_PARAM_QOS_T)2 -#define MIH_C_LINK_PARAM_QOS_MAX_PACKET_TRANSFER_DELAY_ALL_COS (MIH_C_LINK_PARAM_QOS_T)3 -#define MIH_C_LINK_PARAM_QOS_STD_DEVIATION_PACKET_TRANSFER_DELAY (MIH_C_LINK_PARAM_QOS_T)4 -#define MIH_C_LINK_PARAM_QOS_PACKET_LOSS_RATE_ALL_COS_FRAME_RATIO (MIH_C_LINK_PARAM_QOS_T)5 -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_GG_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for GSM and GPRS. See 3GPP TS 25.008. -* 0: RxQual -* 1: RsLev -* 2: Mean BEP -* 3: StDev BEP -* 4-255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_GG) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_EDGE_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for EDGE. -* 0-255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_EDGE) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_ETH_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for Ethernet. -* 0-255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_ETH) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_802_11_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for IEEE 802.11. -* 0: RSSI of the beacon channel, as defined in IEEE Std 802.11-2007. -* (This is applicable only for an MN.) -* 1: No QoS resource available. The corresponding LINK_PARAM_VAL is BOOLEAN set to TRUE when -* no QoS resources available. (This applicable when the traffic stream to be transmitted -* is on an access category configured for mandatory admission control and the request for -* bandwidth was denied by the available APs in the access network). -* 2: Multicast packet loss rate. -* 3–255: (Reserved) -* Medieval extensions: -* 3: System Load. Percentage of usage load present at the system. -* 4:Number registered users. -* 5:Number active users. -* 6:Congestion window of users. Ordered list of the CW used by the clients, ordered according to -* highest value of MAC address. -* 7:Transmission rate of users. Ordered list of the transmission rate used by the clients, ordered -* according to highest value of MAC address. -* 8-255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_11) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_C2K_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for CDMA2000. -* 0: PILOT_STRENGTH -* 1–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_C2K) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_FDD_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for UMTS. See 3GPP TS 25.215. -* 0: CPICH RSCP -* 1: PCCPCH RSCP -* 2: UTRA carrier RSSI -* 3: GSM carrier RSSI -* 4: CPICH Ec/No -* 5: Transport channel BLER -* 6: user equipment (UE) transmitted power -* 7–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_FDD) -#define MIH_C_LINK_PARAM_FDD_CPICH_RSCP (MIH_C_LINK_PARAM_FDD_T)0 -#define MIH_C_LINK_PARAM_FDD_PCCPCH_RSCP (MIH_C_LINK_PARAM_FDD_T)1 -#define MIH_C_LINK_PARAM_FDD_UTRA_CARRIER_RSSI (MIH_C_LINK_PARAM_FDD_T)2 -#define MIH_C_LINK_PARAM_FDD_GSM_CARRIER_RSSI (MIH_C_LINK_PARAM_FDD_T)3 -#define MIH_C_LINK_PARAM_FDD_CPICH_EC_NO (MIH_C_LINK_PARAM_FDD_T)4 -#define MIH_C_LINK_PARAM_FDD_TRANSPORT_CHANNEL_BLER (MIH_C_LINK_PARAM_FDD_T)5 -#define MIH_C_LINK_PARAM_FDD_UE_TRANMITTED_POWER (MIH_C_LINK_PARAM_FDD_T)6 -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_HRPD_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for CDMA2000 HRPD. -* 0: PILOT_STRENGTH -* 1–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_HRPD) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_802_16_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for IEEE 802.16. -* 0–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_16) -//------------------------------------------- -/*! \var MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for IEEE 802.20. -* 0–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_20) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_802_22_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for IEEE 802.22. -* 0–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_22) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_LTE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief A type to represent a link parameter for LTE. -* -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_LTE) -#define MIH_C_LINK_PARAM_LTE_UE_RSRP 0 -#define MIH_C_LINK_PARAM_LTE_UE_RSRQ 1 -#define MIH_C_LINK_PARAM_LTE_UE_CQI 2 -#define MIH_C_LINK_PARAM_LTE_AVAILABLE_BW 3 -#define MIH_C_LINK_PARAM_LTE_PACKET_DELAY 4 -#define MIH_C_LINK_PARAM_LTE_PACKET_LOSS_RATE 5 -#define MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS 6 -#define MIH_C_LINK_PARAM_LTE_MOBILE_NODE_CAPABILITIES 7 -#define MIH_C_LINK_PARAM_LTE_EMBMS_CAPABILITY 8 -#define MIH_C_LINK_PARAM_LTE_JUMBO_FEASIBILITY 9 -#define MIH_C_LINK_PARAM_LTE_JUMBO_SETUP_STATUS 10 -#define MIH_C_LINK_PARAM_LTE_NUM_ACTIVE_EMBMS_RECEIVERS_PER_FLOW 11 - -//------------------------------------------- -/*! \struct MIH_C_LINK_PARAM_TYPE_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Measurable link parameter for which thresholds are being set. -*/ -#define MIH_C_LINK_PARAM_TYPE_CHOICE_GEN (MIH_C_CHOICE_T)0 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_QOS (MIH_C_CHOICE_T)1 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_GG (MIH_C_CHOICE_T)2 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_EDGE (MIH_C_CHOICE_T)3 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_ETH (MIH_C_CHOICE_T)4 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_11 (MIH_C_CHOICE_T)5 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_C2K (MIH_C_CHOICE_T)6 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_FDD (MIH_C_CHOICE_T)7 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_HRPD (MIH_C_CHOICE_T)8 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_16 (MIH_C_CHOICE_T)9 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_20 (MIH_C_CHOICE_T)10 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_22 (MIH_C_CHOICE_T)11 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_LTE (MIH_C_CHOICE_T)12 - -typedef struct MIH_C_LINK_PARAM_TYPE { - MIH_C_CHOICE_T choice; - union { - MIH_C_LINK_PARAM_GEN_T link_param_gen; - MIH_C_LINK_PARAM_QOS_T link_param_qos; - MIH_C_LINK_PARAM_GG_T link_param_gg; - MIH_C_LINK_PARAM_EDGE_T link_param_edge; - MIH_C_LINK_PARAM_ETH_T link_param_eth; - MIH_C_LINK_PARAM_802_11_T link_param_802_11; - MIH_C_LINK_PARAM_C2K_T link_param_c2k; - MIH_C_LINK_PARAM_FDD_T link_param_fdd; - MIH_C_LINK_PARAM_HRPD_T link_param_hrpd; - MIH_C_LINK_PARAM_802_16_T link_param_802_16; - MIH_C_LINK_PARAM_802_20_T link_param_802_20; - MIH_C_LINK_PARAM_802_22_T link_param_802_22; - MIH_C_LINK_PARAM_LTE_T link_param_lte; - } _union; -} MIH_C_LINK_PARAM_TYPE_T; -//------------------------------------------- -/*! \var MIH_C_THRESHOLD_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_THRESHOLD, MIH_C_THRESHOLD_LIST_LENGTH) -/*! \struct MIH_C_LINK_CFG_PARAM_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A link configuration parameter. -* TH_ACTION indicates what action to apply to the listed thresholds. -* When “Cancel threshold†is selected and no thresholds are specified, then all -* currently configured thresholds for the given LINK_PARAM_TYPE are cancelled. -* When “Cancel threshold†is selected and thresholds are specified only those -* configured thresholds for the given LINK_PARAM_TYPE and whose threshold value -* match what was specified are cancelled. -* With “Set one-shot threshold†the listed thresholds are first set and then each of -* the threshold is cancelled as soon as it is crossed for the first time. -*/ -typedef struct MIH_C_LINK_CFG_PARAM { - MIH_C_LINK_PARAM_TYPE_T link_param_type; - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - MIH_C_TIMER_INTERVAL_T timer_interval; -#ifdef RAL_SAME_AS_MEDIEVAL_PROJECT_BUT_I_THINK_THIS_IS_AN_ERROR - LIST(MIH_C_LINK_SCAN_RSP, link_scan_rsp) -#endif - } _union; - MIH_C_TH_ACTION_T th_action; - LIST(MIH_C_THRESHOLD, threshold) -} MIH_C_LINK_CFG_PARAM_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_CFG_STATUS_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The status of link parameter configuration for each threshold specified in the THRESHOLD. -*/ -typedef struct MIH_C_LINK_CFG_STATUS { - MIH_C_LINK_PARAM_TYPE_T link_param_type; - MIH_C_THRESHOLD_T threshold; - MIH_C_CONFIG_STATUS_T config_status; -} MIH_C_LINK_CFG_STATUS_T; -//------------------------------------------- -#define MIH_C_BIT_NUMBER_OF_CLASSES_OF_SERVICE_SUPPORTED MIH_C_BIT_0_VALUE -#define MIH_C_BIT_NUMBER_OF_QUEUES_SUPPORTED MIH_C_BIT_1_VALUE -/*! \var MIH_C_LINK_DESC_REQ_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A set of link descriptors. -* Bitmap Values: -* Bit 0: Number of Classes of Service Supported -* Bit 1: Number of Queues Supported -* Bits 2–15: (Reserved) -*/ -TYPEDEF_BITMAP16(MIH_C_LINK_DESC_REQ) -//------------------------------------------- -/*! \var MIH_C_NUM_COS_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The maximum number of differentiable classes of service supported. -* Valid Range: 0..255 -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_NUM_COS) -//------------------------------------------- -/*! \var MIH_C_NUM_QUEUE_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The number of transmit queues supported. -* Valid Range: 0..255 -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_NUM_QUEUE) -//------------------------------------------- -/*! \struct MIH_C_LINK_DESC_RSP_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Descriptors of a link. -*/ -typedef struct MIH_C_LINK_DESC_RSP { - MIH_C_CHOICE_T choice; - union { - MIH_C_NUM_COS_T num_cos; - MIH_C_NUM_QUEUE_T num_queue; - } _union; -} MIH_C_LINK_DESC_RSP_T; -//------------------------------------------- -/*! \var MIH_C_LINK_DN_REASON_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents the reason of a link down event. -* See Table F.7 for the enumeration values. -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_DN_REASON) -//------------------------------------------- -#define MIH_C_BIT_LINK_DETECTED MIH_C_BIT_0_VALUE -#define MIH_C_BIT_LINK_UP MIH_C_BIT_1_VALUE -#define MIH_C_BIT_LINK_DOWN MIH_C_BIT_2_VALUE -#define MIH_C_BIT_LINK_PARAMETERS_REPORT MIH_C_BIT_3_VALUE -#define MIH_C_BIT_LINK_GOING_DOWN MIH_C_BIT_4_VALUE -#define MIH_C_BIT_LINK_HANDOVER_IMMINENT MIH_C_BIT_5_VALUE -#define MIH_C_BIT_LINK_HANDOVER_COMPLETE MIH_C_BIT_6_VALUE -#define MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS MIH_C_BIT_7_VALUE -/*! \var MIH_C_LINK_EVENT_LIST_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A list of link events. The specified event is selected if the corresponding bit is set to 1. -* Bitmap values: -* Bit 0: Link_Detected -* Bit 1: Link_Up -* Bit 2: Link_Down -* Bit 3: Link_Parameters_Report -* Bit 4: Link_Going_Down -* Bit 5: Link_Handover_Imminent -* Bit 6: Link_Handover_Complete -* Bit 7: Link_PDU_Transmit_Status -* Bit 8–31: (Reserved) -*/ -TYPEDEF_BITMAP32(MIH_C_LINK_EVENT_LIST) -//------------------------------------------- -/*! \var MIH_C_LINK_GD_REASON_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents the reason of a link going down. See Table F.8 for the enumeration values. -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_GD_REASON) -//------------------------------------------- -#define MIH_C_BIT_EVENT_SERVICE_SUPPORTED MIH_C_BIT_1_VALUE -#define MIH_C_BIT_COMMAND_SERVICE_SUPPORTED MIH_C_BIT_2_VALUE -#define MIH_C_BIT_INFORMATION_SERVICE_SUPPORTED MIH_C_BIT_3_VALUE -/*! \var MIH_C_LINK_MIHCAP_FLAG_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents if MIH capability is supported or not. If the bit is set, it indicates -* that the capability is supported. -* Bitmap values: -* Bit 1: event service (ES) supported -* Bit 2: command service (CS) supported -* Bit 3: information service (IS) supported -* Bit 0, 4–7: (Reserved) -*/ -TYPEDEF_BITMAP8(MIH_C_LINK_MIHCAP_FLAG) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_VAL_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The current value of the parameter. The format of the media-dependent value is defined in -* the respective media specification standard and the equivalent number of bits (i.e., first -* bits) of this data type is used. In case that there are remaining unused bits in the data -* type, these are marked as all-zeros (‘0’). -* Valid Range: 0..65535 -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_LINK_PARAM_VAL) - - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.9 Data types for QOS (MAINLY because of precedence definition) -//----------------------------------------------------------------------------- -//------------------------------------------- -/*! \var MIH_C_COS_ID_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief Defines MIH_C_COS_ID_T as a MIH_C_UNSIGNED_INT1_T. -* Valid Range: 0–255 -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_COS_ID) -//------------------------------------------- -/*! \struct MIH_C_MIN_PK_TX_DELAY_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A type to represent the minimum packet transfer delay in ms for the specific CoS specified by the COS_ID. -*/ -typedef struct MIH_C_MIN_PK_TX_DELAY { - MIH_C_COS_ID_T cos_id; - UNSIGNED_INT2(value) -} MIH_C_MIN_PK_TX_DELAY_T; -//------------------------------------------- -/*! \struct MIH_C_AVG_PK_TX_DELAY_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A type to represent the average packet transfer delay in ms for the specific CoS specified by the COS_ID. -*/ -typedef struct MIH_C_AVG_PK_TX_DELAY { - MIH_C_COS_ID_T cos_id; - UNSIGNED_INT2(value) -} MIH_C_AVG_PK_TX_DELAY_T; -//------------------------------------------- -/*! \struct MIH_C_MAX_PK_TX_DELAY_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A type to represent the maximum packet transfer delay in ms for the specific CoS specified by the COS_ID. -*/ -typedef struct MIH_C_MAX_PK_TX_DELAY { - MIH_C_COS_ID_T cos_id; - UNSIGNED_INT2(value) -} MIH_C_MAX_PK_TX_DELAY_T; -//------------------------------------------- -/*! \struct MIH_C_PK_DELAY_JITTER_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A type to represent the packet transfer delay jitter in ms for the specific CoS specified by the COS_ID. -*/ -typedef struct MIH_C_PK_DELAY_JITTER { - MIH_C_COS_ID_T cos_id; - UNSIGNED_INT2(value) -} MIH_C_PK_DELAY_JITTER_T; -//------------------------------------------- -/*! \struct MIH_C_PK_LOSS_RATE_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A type to represent the packet loss rate for the specific CoS specified by the COS_ID. The loss rate is -* equal to the integer part of the result of multiplying –100 times the log10 of the ratio between the num- -* ber of packets lost and the total number of packets transmitted in the class population of interest. -*/ -typedef struct MIH_C_PK_LOSS_RATE { - MIH_C_COS_ID_T cos_id; - UNSIGNED_INT2(value) -} MIH_C_PK_LOSS_RATE_T; -//------------------------------------------- -/*! \var MIH_C_MIN_PK_TX_DELAY_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_MIN_PK_TX_DELAY, MIH_C_QOS_LIST_LENGTH) -/*! \var MIH_C_AVG_PK_TX_DELAY_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_AVG_PK_TX_DELAY, MIH_C_QOS_LIST_LENGTH) -/*! \var MIH_C_MAX_PK_TX_DELAY_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_MAX_PK_TX_DELAY, MIH_C_QOS_LIST_LENGTH) -/*! \var MIH_C_PK_DELAY_JITTER_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_PK_DELAY_JITTER, MIH_C_QOS_LIST_LENGTH) -/*! \var MIH_C_PK_LOSS_RATE_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_PK_LOSS_RATE, MIH_C_QOS_LIST_LENGTH) - -//------------------------------------------- -/*! \var MIH_C_NUM_COS_TYPES_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_NUM_COS_TYPES) - -/*! \struct MIH_C_QOS_PARAM_VAL_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A choice of Class of Service (CoS) parameters. -*/ -typedef struct MIH_C_QOS_PARAM_VAL { - MIH_C_CHOICE_T choice; - union { - MIH_C_NUM_COS_TYPES_T num_qos_types; - LIST(MIH_C_MIN_PK_TX_DELAY, min_pk_tx_delay) - LIST(MIH_C_AVG_PK_TX_DELAY, avg_pk_tx_delay) - LIST(MIH_C_MAX_PK_TX_DELAY, max_pk_tx_delay) - LIST(MIH_C_PK_DELAY_JITTER, pk_delay_jitter) - LIST(MIH_C_PK_LOSS_RATE, pk_loss_rate) - } _union; -} MIH_C_QOS_PARAM_VAL_T; -#define MIH_C_QOS_PARAM_VAL_CHOICE_NUM_QOS_TYPES (MIH_C_CHOICE_T)0 -#define MIH_C_QOS_PARAM_VAL_CHOICE_MIN_PK_TX_DELAY (MIH_C_CHOICE_T)1 -#define MIH_C_QOS_PARAM_VAL_CHOICE_AVG_PK_TX_DELAY (MIH_C_CHOICE_T)2 -#define MIH_C_QOS_PARAM_VAL_CHOICE_MAX_PK_TX_DELAY (MIH_C_CHOICE_T)3 -#define MIH_C_QOS_PARAM_VAL_CHOICE_PK_DELAY_JITTER (MIH_C_CHOICE_T)4 -#define MIH_C_QOS_PARAM_VAL_CHOICE_PK_LOSS_RATE (MIH_C_CHOICE_T)5 - -//------------------------------------------- -/*! \struct MIH_C_QOS_LIST_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A list of Class of Service (CoS) parameters. -*/ -typedef struct MIH_C_QOS_LIST { - MIH_C_NUM_COS_TYPES_T num_qos_types; - LIST(MIH_C_MIN_PK_TX_DELAY, min_pk_tx_delay) - LIST(MIH_C_AVG_PK_TX_DELAY, avg_pk_tx_delay) - LIST(MIH_C_MAX_PK_TX_DELAY, max_pk_tx_delay) - LIST(MIH_C_PK_DELAY_JITTER, pk_delay_jitter) - LIST(MIH_C_PK_LOSS_RATE, pk_loss_rate) -} MIH_C_QOS_LIST_T; - - - -//------------------------------------------- -/*! \struct MIH_C_LINK_PARAM_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents a link parameter type and value pair. -*/ -typedef struct MIH_C_LINK_PARAM { - MIH_C_LINK_PARAM_TYPE_T link_param_type; - MIH_C_CHOICE_T choice; - union { - MIH_C_LINK_PARAM_VAL_T link_param_val; - MIH_C_QOS_PARAM_VAL_T qos_param_val; - } _union; -} MIH_C_LINK_PARAM_T; -#define MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL (MIH_C_CHOICE_T)0 -#define MIH_C_LINK_PARAM_CHOICE_QOS_PARAM_VAL (MIH_C_CHOICE_T)1 -//------------------------------------------- -/*! \struct MIH_C_LINK_PARAM_RPT_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents a link parameter report. -* Includes an option of the THRESHOLD that was crossed. -* If no THRESHOLD is included, then this is a periodic report. -*/ -typedef struct MIH_C_LINK_PARAM_RPT { - MIH_C_LINK_PARAM_T link_param; - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - MIH_C_THRESHOLD_T threshold; - } _union; -} MIH_C_LINK_PARAM_RPT_T; -#define MIH_C_LINK_PARAM_RPT_CHOICE_NULL 0 -#define MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD 1 -//------------------------------------------- -/*! \var MIH_C_LINK_ADDR_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_ADDR, MIH_C_LINK_ADDR_LIST_LENGTH) -/*! \struct MIH_C_LINK_POA_LIST_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A list of PoAs for a particular link. The LIST(LINK_ADDR) is a list of PoA -* link addresses and is sorted from most preferred first to least preferred last. -*/ -typedef struct MIH_C_LINK_POA_LIST { - MIH_C_LINK_ID_T link_id; - LIST(MIH_C_LINK_ADDR, link_addr) -} MIH_C_LINK_POA_LIST_T; -//------------------------------------------- -#define MIH_C_LINK_RES_STATUS_AVAILABLE MIH_C_MIH_C_BOOLEAN_TRUE -#define MIH_C_LINK_RES_STATUS_NOT_AVAILABLE MIH_C_BOOLEAN_FALSE -/*! \var MIH_C_LINK_RES_STATUS_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Indicates if a resource is available or not. -* TRUE: Available -* FALSE: Not available. -*/ -TYPEDEF_BOOLEAN(MIH_C_LINK_RES_STATUS) -//------------------------------------------- -#define MIH_C_BIT_LINK_STATES_REQ_OP_MODE MIH_C_BIT_0_VALUE -#define MIH_C_BIT_LINK_STATES_REQ_CHANNEL_ID MIH_C_BIT_1_VALUE -/*! \var MIH_C_LINK_STATES_REQ_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Link states to be requested. -* Bit 0: OP_MODE -* Bit 1: CHANNEL_ID -* Bit 2–15: (Reserved) -*/ -TYPEDEF_BITMAP16(MIH_C_LINK_STATES_REQ) -//------------------------------------------- -#define MIH_C_OPMODE_NORMAL_MODE 0 -#define MIH_C_OPMODE_POWER_SAVING_MODE 1 -#define MIH_C_OPMODE_POWERED_DOWN 2 -/*! \var MIH_C_OPMODE_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The link power mode. -* 0: Normal Mode -* 1: Power Saving Mode -* 2: Powered Down -* 3–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_OPMODE) -//------------------------------------------- -/*! \struct MIH_C_LINK_STATES_RSP_T -* \brief The operation mode or the channel ID of the link. -*/ -typedef struct MIH_C_LINK_STATES_RSP { - MIH_C_CHOICE_T choice; - union { - MIH_C_OPMODE_T op_mode; - MIH_C_CHANNEL_ID_T channel_id; - } _union; -} MIH_C_LINK_STATES_RSP_T; -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_TYPE_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_PARAM_TYPE, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) -/*! \struct MIH_C_LINK_STATUS_REQ_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents the possible information to request from a link. -*/ -typedef struct MIH_C_LINK_STATUS_REQ { - MIH_C_LINK_STATES_REQ_T link_states_req; - LIST(MIH_C_LINK_PARAM_TYPE, link_param_type) - MIH_C_LINK_DESC_RSP_T link_desc_rsp; -} MIH_C_LINK_STATUS_REQ_T; -//------------------------------------------- -/*! \var MIH_C_LINK_STATES_RSP_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_STATES_RSP, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) -/*! \var MIH_C_LINK_PARAM_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_PARAM, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) -/*! \var MIH_C_LINK_DESC_RSP_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_DESC_RSP, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) -/*! \struct MIH_C_LINK_STATUS_RSP_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A set of link status parameter values correspond to the LINK_STATUS_REQ. -*/ -typedef struct MIH_C_LINK_STATUS_RSP { - LIST(MIH_C_LINK_STATES_RSP, link_states_rsp) - LIST(MIH_C_LINK_PARAM, link_param) - LIST(MIH_C_LINK_DESC_RSP, link_desc_rsp) -} MIH_C_LINK_STATUS_RSP_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_TUPLE_ID_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The identifier of a link that is associated with a PoA. The LINK_ID contains the MN LINK_ADDR. -* The optional LINK_ADDR contains a link address of PoA. -*/ -typedef struct MIH_C_LINK_TUPLE_ID { - MIH_C_LINK_ID_T link_id; - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - MIH_C_LINK_ADDR_T link_addr; - } _union; -} MIH_C_LINK_TUPLE_ID_T; -#define MIH_C_LINK_TUPLE_ID_CHOICE_NULL 0 -#define MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR 1 -//------------------------------------------- - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.5 Link actions -//----------------------------------------------------------------------------- -#define MIH_C_LINK_ACTION_LINK_NONE 0 -#define MIH_C_LINK_ACTION_LINK_LINK_DISCONNECT 1 /* Disconnect the link connection directly.*/ -#define MIH_C_LINK_ACTION_LINK_LOW_POWER 2 /* Cause the link to adjust its battery power level to be low power consumption. */ -#define MIH_C_LINK_ACTION_LINK_POWER_DOWN 3 /* Cause the link to power down and turn off the radio.*/ -#define MIH_C_LINK_ACTION_LINK_POWER_UP 4 /* Cause the link to power up and establish L2 connectivity. For UMTS link type, power up lower layers and establish PDP context. */ - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.6 Link action attibutes -//----------------------------------------------------------------------------- -#define MIH_C_LINK_ACTION_ATTRIBUTE_DATA_FWD_REQ 0 /* This indication requires the buffered data at the old serving PoA entity to be forwarded - * to the new target PoA entity in order to avoid data loss. This action can be taken imme- - * diately after the old serving PoS receives MIH_N2N_HO_Commit response message from the new - * target PoS, or the old serving PoS receives MIH_Net_HO_Commit response message from the MN. - * This is not valid on UMTS link type.*/ -#define MIH_C_LINK_ACTION_ATTRIBUTE_LINK_RES_RETAIN 1 /* The link will be disconnected but the resource for the link connection still remains so - * reestablishing the link connection later can be more efficient.*/ -#define MIH_C_LINK_ACTION_ATTRIBUTE_LINK_SCAN 2 /* Cause the link to perform a scan.*/ - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.7 Link down reason code -//----------------------------------------------------------------------------- -#define MIH_C_LINK_DOWN_REASON_EXPLICIT_DISCONNECT 0 /* The link is down because of explicit disconnect procedures initiated either by MN or network.*/ -#define MIH_C_LINK_DOWN_REASON_PACKET_TIMEOUT 1 /* The link is down because no acknowledgements were received for transmitted packets within the - * specified time limit.*/ -#define MIH_C_LINK_DOWN_REASON_NO_RESOURCE 2 /* The link is down because there were no resources to maintain the connection.*/ -#define MIH_C_LINK_DOWN_REASON_NO_BROADCAST 3 /* The link is down because broadcast messages (such as beacons in IEEE 802.11 management frames) - * could not be received by MN. */ -#define MIH_C_LINK_DOWN_REASON_AUTHENTICATION_FAILURE 4 /* Authentication failure.*/ -#define MIH_C_LINK_DOWN_REASON_BILLING_FAILURE 5 /* Billing failure.*/ - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.8 Link going down reason code -//----------------------------------------------------------------------------- -#define MIH_C_LINK_GOING_DOWN_REASON_EXPLICIT_DISCONNECT 0 /* The link is going to be down because explicit disconnect procedures will be - * initiated either by MN or network. For example, when a BS has decided to - * shutdown for administrative reasons or an operator of the terminal has - * decided to execute a handover manually, a Link_Going_Down trigger is sent - * to the MIHF. - */ -#define MIH_C_LINK_GOING_DOWN_REASON_LINK_PARAMETER_DEGRADING 1 /* The link is going to be down because broadcast messages (such as beacons in - * IEEE 802.11 management frames) could not be received by MN. - */ -#define MIH_C_LINK_GOING_DOWN_REASON_LOW_POWER 2 /* The link is going to be down because the power level of the terminal is low - * and the current link will not be maintained in such a low power level. Mobile - * terminals usually have limited battery supply, and when the battery level of - * the terminal is low, a terminal can choose a link that has lower power con- - * sumption for handover according to the received Link_Going_Down triggers - * with this reason code. This will lengthen the usable time for the terminal. - */ -#define MIH_C_LINK_GOING_DOWN_REASON_NO_RESOURCE 3 /* The link is going to be down because there will be no resources to maintain - * the current connection. For example, a BS that has too many users can send - * Link_Going_Down indications to terminals when the links with them can not - * be kept because of insufficient resources. Another example is that users with - * higher priority can preempt the ones with lower priority when no more - * resources can be allocated in 3GPP, and this can also cause a - * Link_Going_Down indication with this reason code. - */ - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.10 Not implemented -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.11 Not implemented -//----------------------------------------------------------------------------- - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.12 Data types for IP configuration -//----------------------------------------------------------------------------- -#define MIH_C_BIT_IP_CFG_MTHDS_IPV4_STATIC_CONFIGURATION MIH_C_BIT_0_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_IPV4_DYNAMIC_CONFIGURATION MIH_C_BIT_1_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_MOBILE_IPV4_WITH_FA_COA MIH_C_BIT_2_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_MOBILE_IPV4_WITHOUT_FA MIH_C_BIT_3_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_IPV6_STATELESS_ADDRESS_CONFIGURATION MIH_C_BIT_11_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_IPV6_STATEFULL_ADDRESS_CONFIGURATION MIH_C_BIT_12_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_IPV6_MANUAL_ADDRESS_CONFIGURATION MIH_C_BIT_13_VALUE -/*! \var MIH_C_IP_CFG_MTHDS_T -* \brief A set of IP configuration methods. -* Bit 0: IPv4 static configuration -* Bit 1: IPv4 dynamic configuration (DHCPv4) -* Bit 2: Mobile IPv4 with foreign agent (FA) care-of address (CoA) (FA-CoA) -* Bit 3: Mobile IPv4 without FA (Co-located CoA) -* Bits 4–10: reserved for IPv4 address configurations -* Bit 11: IPv6 stateless address configuration -* Bit 12: IPv6 stateful address configuration (DHCPv6) -* Bit 13: IPv6 manual configuration -* Bits 14–31: (Reserved) -*/ -TYPEDEF_BITMAP32(MIH_C_IP_CFG_MTHDS) -//------------------------------------------- -#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV4 MIH_C_BIT_0_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV4_REGIONAL_REGISTRATION MIH_C_BIT_1_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV6 MIH_C_BIT_2_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_HIERARCHICAL_MOBILE_IPV6 MIH_C_BIT_3_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_LOW_LATENCY_HANDOFFS MIH_C_BIT_4_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV6_FAST_HANDOVERS MIH_C_BIT_5_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_IKEV2_MOBILITY_AND_MULTIHOMING_PROTOCOL MIH_C_BIT_6_VALUE -/*! \var MIH_C_IP_MOB_MGMT_T -* \brief Indicates the supported mobility management protocols. -* Bit 0: Mobile IPv4 (IETF RFC 3344) -* Bit 1: Mobile IPv4 Regional Registration (IETF RFC 4857) -* Bit 2: Mobile IPv6 (IETF RFC 3775) -* Bit 3: Hierarchical Mobile IPv6 (IETF RFC 4140) -* Bit 4: Low Latency Handoffs (IETF RFC 4881) -* Bit 5: Mobile IPv6 Fast Handovers (IETF RFC 5268) -* Bit 6: IKEv2 Mobility and Multihoming Protocol (IETF RFC 4555) -* Bit 7–15: (Reserved) -*/ -TYPEDEF_BITMAP16(MIH_C_IP_MOB_MGMT) -//------------------------------------------- -/*! \var MIH_C_IP_PREFIX_LEN_T -* \brief The length of an IP subnet prefix. -* Valid Range: -* 0..32 for IPv4 subnet. -* 0..64, 65..127 for IPv6 subnet. (IETF RFC 4291 [B25]) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_IP_PREFIX_LEN) -//------------------------------------------- -/*! \var MIH_C_IP_RENEWAL_FLAG_T -* \brief Indicates whether MN’s IP address needs to be changed or not. -* TRUE: Change required. -* FALSE: Change not required. -*/ -TYPEDEF_BOOLEAN(MIH_C_IP_RENEWAL_FLAG) -//------------------------------------------- -/*! \struct MIH_C_IP_SUBNET_INFO_T -* \brief Represent an IP subnet. The IP_PREFIX_LEN contains the bit -* length of the prefix of the subnet to which the IP_ADDR -* belongs. -*/ -typedef struct MIH_C_IP_SUBNET_INFO { - MIH_C_IP_PREFIX_LEN_T ip_prefix_len; - MIH_C_IP_ADDR_T ip_addr; -} MIH_C_IP_SUBNET_INFO_T; - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.13 Data types for information elements -//----------------------------------------------------------------------------- -/*! \var MIH_C_NET_AUX_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent an auxiliary access network -* identifier. This is HESSID if network type is -* IEEE 802.11. -*/ -TYPEDEF_OCTET_STRING(MIH_C_NET_AUX_ID, 253) - -// already defined in other section TYPEDEF_OCTET_STRING(MIH_C_NETWORK_ID, 253) -/*! \var MIH_C_BAND_CLASS_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief CDMA band class. -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_BAND_CLASS) -/*! \var MIH_C_BANDWIDTH_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Channel bandwidth in kb/s. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_BANDWIDTH) -/*! \var MIH_C_BASE_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Base station identifier. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_BASE_ID) -/*! \var MIH_C_DOWN_BP_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A List of FEC Code Type for Downlink burst. -* Refer to 11.4.1 in IEEE 802.16Rev2/D5.0. -*/ -TYPEDEF_BITMAP256(MIH_C_DOWN_BP) -/*! \var MIH_C_TYPE_EXT_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A generic type extension contained indicating a flexible length and format field. The content is to be -* defined and filled by the appropriate SDO or service provider consortium, etc. -* The value is a non-NULL terminated string whose length shall not exceed 253 octets. -*/ -TYPEDEF_OCTET_STRING(MIH_C_TYPE_EXT, 253) -/*! \var MIH_C_UP_BP_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A List of FEC Code Type for Uplink burst. -* Refer to 11.3.1 in IEEE 802.16Rev2/D5.0 -*/ -TYPEDEF_BITMAP256(MIH_C_UP_BP) -//------------------------------------------- -/*! \struct MIH_C_BURST_PROF_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Burst profile. -*/ -typedef struct MIH_C_BURST_PROF { - MIH_C_DOWN_BP_T down_bp; - MIH_C_UP_BP_T up_bp; -} MIH_C_BURST_PROF_T; -//------------------------------------------- -/*! \struct MIH_C_CH_RANGE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type that contains two numbers. The first unsigned -* integer is the low range. The second unsigned integer -* is the high range. Both values are in kHz. -* The first unsigned integer value should always be less -* than or equal to the second unsigned integer. -*/ -typedef struct MIH_C_CH_RANGE { - UNSIGNED_INT4(low_range); - UNSIGNED_INT4(high_range); -} MIH_C_CH_RANGE_T; -//------------------------------------------- -#define MIH_C_COST_UNIT_SECOND 0 -#define MIH_C_COST_UNIT_MINUTE 1 -#define MIH_C_COST_UNIT_HOURS 2 -#define MIH_C_COST_UNIT_DAY 3 -#define MIH_C_COST_UNIT_WEEK 4 -#define MIH_C_COST_UNIT_MONTH 5 -#define MIH_C_COST_UNIT_YEAR 6 -#define MIH_C_COST_UNIT_FREE 7 -#define MIH_C_COST_UNIT_FLAT_RATE 8 -/*! \var MIH_C_COST_UNIT_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent the unit of a cost. -* 0: second -* 1: minute -* 2: hours -* 3: day -* 4: week -* 5: month -* 6: year -* 7: free -* 8: flat rate -* 9–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_COST_UNIT) -//------------------------------------------- -/*! \struct MIH_C_COST_VALUE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent the value of a cost. -* The first 4-octet contains the integer part of the cost. -* The last 2-octet contains the fraction part where it rep- -* resents a 3-digit fraction. -* Therefore, the value range of the fraction part is -* [0,999]. -* For example, for a value of ““0.5”â€, the integer part is -* zero and the fraction part is 500. -*/ -typedef struct MIH_C_COST_VALUE { - UNSIGNED_INT4(cost_integer_part); - UNSIGNED_INT2(cost_fraction_part); -} MIH_C_COST_VALUE_T; -//------------------------------------------- -/*! \var MIH_C_COST_CURR_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent the currency of a cost. -* A three-letter currency code (e.g., “USDâ€) specified -* by ISO 4217. -*/ -TYPEDEF_OCTET_STRING(MIH_C_COST_CURR, 3) -//------------------------------------------- -/*! \struct MIH_C_COST_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent a cost. -*/ -typedef struct MIH_C_COST { - MIH_C_COST_UNIT_T cost_unit; - MIH_C_COST_VALUE_T cost_value; - MIH_C_COST_CURR_T cost_curr; -} MIH_C_COST_T; -//------------------------------------------- -/*! \var MIH_C_CNTRY_CODE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Country code, represented as two letter ISO 3166-1 country code in capital ASCII letters. -*/ -TYPEDEF_OCTET(MIH_C_CNTRY_CODE, 2) -//------------------------------------------- -/*! \var MIH_C_DATA_RATE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief -*/ -TYPEDEF_UNSIGNED_INT4(MIH_C_DATA_RATE) -//------------------------------------------- -/*! \var MIH_C_DU_CTR_FREQ_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Downlink/Uplink center frequency in kHz. -*/ -TYPEDEF_INTEGER8(MIH_C_DU_CTR_FREQ) -//------------------------------------------- -/*! \var MIH_C_EIRP_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief BS’s effective isotropic radiated power level. Signed in units of 1 dBm. -*/ -TYPEDEF_INTEGER4(MIH_C_EIRP) -//------------------------------------------- -/*! \struct MIH_C_GAP_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief This gap is an integer number of physical slot durations and starts on a -* physical slot boundary. Used on TDD systems only. -* The UNSIGNED_INT(2) is used for the TTG - transmit/receive transition gap. -* The UNSIGNED_INT(1) is used for the RTG - receive/transmit transition gap. -*/ -typedef struct MIH_C_GAP { - UNSIGNED_INT2(ttg); - UNSIGNED_INT1(rtg); -} MIH_C_GAP_T; -//------------------------------------------- -/*! \var MIH_C_HO_CODE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief HANDOVER_RANGING_CODE. -* Refer to 11.3.1 in IEEE 802.16Rev2/D5.0. -*/ -TYPEDEF_INTEGER1(MIH_C_HO_CODE) -//------------------------------------------- -/*! \var MIH_C_INIT_CODE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief INITIAL_RANGING_CODE. -* Refer to 11.3.1 in IEEE 802.16Rev2/D5.0. -*/ -TYPEDEF_INTEGER1(MIH_C_INIT_CODE) -//------------------------------------------- -/*! \struct MIH_C_CDMA_CODES_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A set of CDMA ranging codes. -*/ -typedef struct MIH_C_CDMA_CODES { - MIH_C_INIT_CODE_T init_code; - MIH_C_HO_CODE_T ho_code; -} MIH_C_CDMA_CODES_T; -//------------------------------------------- -/*! \struct MIH_C_DCD_UCD_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent the downlink channel descriptor and the uplink channel descriptor. -*/ -typedef struct MIH_C_DCD_UCD { - MIH_C_BASE_ID_T base_id; - MIH_C_BANDWIDTH_T bandwidth; - MIH_C_DU_CTR_FREQ_T du_ctr_freq; - MIH_C_EIRP_T eirp; - MIH_C_GAP_T gap; - MIH_C_BURST_PROF_T burst_prof; - MIH_C_CDMA_CODES_T cdma_codes; -} MIH_C_DCD_UCD_T; -//------------------------------------------- -/*! \var MIH_C_FQDN_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief The fully qualified domain name of a host as described in IETF RFC 2181. -*/ -TYPEDEF_OCTET_STRING(MIH_C_FQDN, 253) -//------------------------------------------- -// TBD FREQ_BANDS -/*! \var MIH_C_FREQ_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Identifier of the carrier frequency. Valid Range: 0..65535 -*/ -TYPEDEF_INTEGER2(MIH_C_FREQ_ID) -//------------------------------------------- -/*! \var MIH_C_FQ_CODE_NUM_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief UMTS scrambling code, cdma2000 Walsh code. -* Valid Range: 0..65535 -*/ -TYPEDEF_INTEGER2(MIH_C_FQ_CODE_NUM) -//------------------------------------------- -/*! \var MIH_C_IP4_ADDR_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief An IPv4 address as described in IETF RFC 791 -*/ -TYPEDEF_OCTET(MIH_C_IP4_ADDR, 4) -/*! \var MIH_C_IP6_ADDR_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief An IPv6 address as described in IETF RFC 4291 -*/ -TYPEDEF_OCTET(MIH_C_IP6_ADDR, 16) - -/*! \var MIH_C_DHCP_SERV_T -* \ingroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION -* \brief IP address of candidate DHCP Server. It is only -* included when dynamic address configuration is supported. -*/ -typedef MIH_C_IP_ADDR_T MIH_C_DHCP_SERV_T; -/*! \var MIH_C_FN_AGNT_T -* \ingroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION -* \brief IP address of candidate Foreign Agent. It is only included when Mobile IPv4 is supported. -*/ -typedef MIH_C_IP_ADDR_T MIH_C_FN_AGNT_T; -/*! \var MIH_C_ACC_RTR_T -* \ingroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION -* \brief IP address of candidate Access Router. It is only -* included when IPv6 Stateless configuration is supported. -*/ -typedef MIH_C_IP_ADDR_T MIH_C_ACC_RTR_T; -//------------------------------------------- -/*! \struct MIH_C_IP_CONFIG_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief IP Configuration Methods supported by the access network. -*/ -typedef struct MIH_C_IP_CONFIG { - MIH_C_IP_CFG_MTHDS_T ip_cfg_mthds; - MIH_C_CHOICE_T choice_dhcp_serv; - union { - MIH_C_NULL_T null_attr; - MIH_C_DHCP_SERV_T dhcp_serv; - } _union_dhcp_serv; - MIH_C_CHOICE_T choice_fn_agnt; - union { - MIH_C_NULL_T null_attr; - MIH_C_FN_AGNT_T fn_agnt; - } _union_fn_agnt; - MIH_C_CHOICE_T choice_acc_rtr; - union { - MIH_C_NULL_T null_attr; - MIH_C_ACC_RTR_T acc_rtr; - } _union_acc_rtr; -} MIH_C_IP_CONFIG_T; -//------------------------------------------- -#define MIH_C_BIT_NET_CAPS_SECURITY MIH_C_BIT_0_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS0 MIH_C_BIT_1_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS1 MIH_C_BIT_2_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS2 MIH_C_BIT_3_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS3 MIH_C_BIT_4_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS4 MIH_C_BIT_5_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS5 MIH_C_BIT_6_VALUE -#define MIH_C_BIT_NET_CAPS_INTERNET_ACCESS MIH_C_BIT_7_VALUE -#define MIH_C_BIT_NET_CAPS_EMERGENCY_SERVICES MIH_C_BIT_8_VALUE -#define MIH_C_BIT_NET_CAPS_MIH_CAPABILITY MIH_C_BIT_9_VALUE -/*! \var MIH_C_NET_CAPS_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief These bits provide high level capabilities supported on a network. -* Bitmap Values: -* Bit 0: Security – Indicates that some level of security is supported when set. -* Bit 1: QoS Class 0 – Indicates that QoS for class 0 is supported when set. -* Bit 2: QoS Class 1 – Indicates that QoS for class 1 is supported when set. -* Bit 3: QoS Class 2 – Indicates that QoS for class 2 is supported when set; Otherwise, no QoS for class 2 support is available. -* Bit 4: QoS Class 3 – Indicates that QoS for class 3 is supported when set; Otherwise, no QoS for class 3 support is available. -* Bit 5: QoS Class 4 – Indicates that QoS for class 4 is supported when set; Otherwise, no QoS for class 4 support is available. -* Bit 6: QoS Class 5 – Indicates that QoS for class 5 is supported when set; Otherwise, no QoS for class 5 support is available. -* Bit 7: Internet Access – Indicates that Internet access is supported when set; Otherwise, no Internet access support is available. -* Bit 8: Emergency Services – Indicates that some level of emergency services is supported when set; Otherwise, no emergency service support is available. -* Bit 9: MIH Capability – Indicates that MIH is supported when set; Otherwise, no MIH support is available. -* Bit 10–31: (Reserved) -*/ -TYPEDEF_BITMAP32(MIH_C_NET_CAPS) -//------------------------------------------- -/*! \var MIH_C_SUBTYPE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A network subtype. See Table F.14. -*/ -TYPEDEF_BITMAP64(MIH_C_SUBTYPE) -//------------------------------------------- - -//------------------------------------------- -/*! \struct MIH_C_NETWORK_TYPE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent a network type and its subtype. -* See Table F.14 for details. -*/ -typedef struct MIH_C_NETWORK_TYPE { - MIH_C_CHOICE_T choice_link_type; - union { - MIH_C_NULL_T null_attr; - MIH_C_LINK_TYPE_T link_type; - } _union_link_type; - MIH_C_CHOICE_T choice_subtype; - union { - MIH_C_NULL_T null_attr; - MIH_C_SUBTYPE_T subtype; - } _union_subtype; - MIH_C_CHOICE_T choice_type_ext; - union { - MIH_C_NULL_T null_attr; - MIH_C_TYPE_EXT_T type_ext; - } _union_type_ext; -} MIH_C_NETWORK_TYPE_T; -//------------------------------------------- -/*! \var MIH_C_OP_NAME_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent an operator name. The value -* uniquely identifies the operator name within the scope -* of the OP_NAMESPACE. -* The value is a non NULL terminated string whose -* length shall not exceed 253 octets. -*/ -TYPEDEF_OCTET_STRING(MIH_C_OP_NAME, 253) -//------------------------------------------- -/*! \var MIH_C_OP_NAMESPACE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent a type of operator name. -* 0: GSM/UMTS -* 1: CDMA -* 2: REALM (as defined in [B28]). -* 3: ITU-T/TSB -* 4: General -* 5–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_OP_NAMESPACE) -//------------------------------------------- -/*! \struct MIH_C_OPERATOR_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent an operator identifier. -*/ -typedef struct MIH_C_OPERATOR_ID { - MIH_C_OP_NAME_T opname; - MIH_C_OP_NAMESPACE_T opnamespace; -} MIH_C_OPERATOR_ID_T; -//------------------------------------------- -/*! \struct MIH_C_SIB_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent UMTS system information block (SIB). -*/ -typedef struct MIH_C_SIB { - MIH_C_CELL_ID_T cell_id; - MIH_C_FQ_CODE_NUM_T fq_code_num; -} MIH_C_SIB_T; -//------------------------------------------- -/*! \var MIH_C_PILOT_PN_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Pilot PN sequence offset index. -*/ -TYPEDEF_INTEGER2(MIH_C_PILOT_PN) -//------------------------------------------- -/*! \struct MIH_C_SYS_PARAMS_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief CDMA2000 system parameters. -*/ -typedef struct MIH_C_SYS_PARAMS { - MIH_C_BASE_ID_T base_id; - MIH_C_PILOT_PN_T pilot_pn; - MIH_C_FREQ_ID_T freq_id; - MIH_C_BAND_CLASS_T band_class; -} MIH_C_SYS_PARAMS_T; -//------------------------------------------- -/*! \struct MIH_C_MIH_C_PARAMETERS_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A data type to represent system information depending on the network type. -* DCD_UCD: IEEE 802.16 -* SIB: UMTS -* SYS_PARAMS: cdma2000 -*/ -typedef struct MIH_C_PARAMETERS { - MIH_C_CHOICE_T choice; - union { - MIH_C_DCD_UCD_T dcd_ucd; - MIH_C_SIB_T sib; - MIH_C_SYS_PARAMS_T sys_params; - } _union; -} MIH_C_MIH_C_PARAMETERS_T; -//------------------------------------------- -/*! \struct MIH_C_PROXY_ADDR_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief L3 address of a proxy server. -*/ -typedef struct MIH_C_PROXY_ADDR { - MIH_C_CHOICE_T choice; - union { - MIH_C_IP4_ADDR_T ip4_addr; - MIH_C_IP6_ADDR_T ip6_addr; - MIH_C_FQDN_T fqdn; - } _union; -} MIH_C_PROXY_ADDR_T; -//------------------------------------------- -// TBD REGU_DOMAIN -// TBD ROAMING_PTNS -/*! \var MIH_C_SP_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A service provider identifier. -* A non-NULL terminated string whose length shall not exceed 253 octets. -*/ -TYPEDEF_OCTET_STRING(MIH_C_SP_ID, 253) -// TBD SUPPORTED_LCP -// TBD SYSTEM_INFO - - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.19 Data type for MIHF identification -//----------------------------------------------------------------------------- -/** \defgroup MIH_C_F19_DATA_TYPE_FOR_MIHF_IDENTIFICATION Data types for MIHF identification - * \ingroup MIH_C_INTERFACE - * - * @{ - */ -/*! \var MIH_C_MIHF_ID_T -* \brief The MIHF Identifier: MIHF_ID is a network access identifier (NAI). -* NAI shall be unique as per IETF RFC 4282. If L3 communication is -* used and MIHF entity resides in the network node, then MIHF_ID is -* the fully qualified domain name or NAI-encoded IP address -* (IP4_ADDR or IP6_ADDR) of the entity that hosts the MIH Services. -* If L2 communication is used then MIHF_ID is the NAI-encoded link- -* layer address (LINK_ADDR) of the entity that hosts the MIH ser- -* vices. In an NAI-encoded IP address or link-layer address, each octet -* of binary-encoded IP4_ADDR, IP6_ADDR and LINK_ADDR data is -* encoded in the username part of the NAI as “\†followed by the octet -* value. A multicast MIHF identifier is defined as an MIHF ID of zero -* length. When an MIH protocol message with multicast MIHF ID is -* transmitted over the L2 data plane, a group MAC address (01-80-C2- -* 00-00-0E) shall be used (see IEEE P802.1aj/D2.2). The maximum -* length is 253 octets. -*/ -TYPEDEF_OCTET_STRING(MIH_C_MIHF_ID, 253) -/** @}*/ - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.20—Data type for MIH capabilities -//----------------------------------------------------------------------------- -/** \defgroup MIH_C_F19_DATA_TYPE_FOR_MIHF_CAPABILITIES Data type for MIH capabilities - * \ingroup MIH_C_INTERFACE - * - * @{ - */ -/*! \struct MIH_C_LINK_DET_CFG_T -* \brief A data type for configuring link detected event trigger. -*/ -typedef struct MIH_C_LINK_DET_CFG { - MIH_C_CHOICE_T choice_network_id; - union { - MIH_C_NULL_T null_attr; - MIH_C_NETWORK_ID_T network_id; - } _union_network_id; - MIH_C_CHOICE_T choice_sig_strength; - union { - MIH_C_NULL_T null_attr; - MIH_C_SIG_STRENGTH_T sig_strength; - } _union_sig_strength; - MIH_C_CHOICE_T choice_link_data_rate; - union { - MIH_C_NULL_T null_attr; - MIH_C_LINK_DATA_RATE_T link_data_rate; - } _union_link_data_rate; -} MIH_C_LINK_DET_CFG_T; -//------------------------------------------- -/*! \struct MIH_C_EVT_CFG_INFO_T -* \brief Represents additional configuration information -* for event subscription. The list of -* LINK_DET_CFG contains additional filtering -* when subscribing to link detected events. The list -* of LINK_CFG_PARAM contains additional fil- -* tering when subscribing to link parameter report -* events. -*/ -typedef struct MIH_C_EVT_CFG_INFO { - MIH_C_CHOICE_T choice; - union { - MIH_C_LINK_DET_CFG_T link_det_cfg; - MIH_C_LINK_CFG_PARAM_T link_cfg_param; - } _union; -} MIH_C_EVT_CFG_INFO_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_DET_INFO_T -* \brief Information of a detected link. -* LINK_TUPLE_ID is the link detected. -* NETWORK_ID is the access network identifier. -* NET_AUX_ID is an auxiliary access network identifier if applicable. -* SIG_STRENGTH is the signal strength of the detected link. -* UNSIGNED_INT(2) is the SINR value of the link. -* LINK_DATA_RATE is the maximum transmission rate on the detected link. -* LINK_MIHCAP_FLAG indicates which MIH capabilities are supported on the detected link. -* NET_CAPS is the network capability supported by the network link. -*/ -typedef struct MIH_C_LINK_DET_INFO { - MIH_C_LINK_TUPLE_ID_T link_tuple_id; - MIH_C_NETWORK_ID_T network_id; - MIH_C_NET_AUX_ID_T net_aux_id; - MIH_C_SIG_STRENGTH_T sig_strength; - UNSIGNED_INT2(sinr) - MIH_C_LINK_DATA_RATE_T link_data_rate; - MIH_C_LINK_MIHCAP_FLAG_T link_mihcap_flag; - MIH_C_NET_CAPS_T net_caps; -} MIH_C_LINK_DET_INFO_T; -//------------------------------------------- -/*! \struct MIH_C_MBB_HO_SUPP_T -* \brief Indicates if make before break is supported FROM the first network type TO the second network type. -* The BOOLEAN value assignment: -* True: Make before break is supported. -* False: Make before break is not supported. -*/ -typedef struct MIH_C_MBB_HO_SUPP { - MIH_C_NETWORK_TYPE_T from; - MIH_C_NETWORK_TYPE_T to; - BOOLEAN(supported) -} MIH_C_MBB_HO_SUPP_T; -//------------------------------------------- -#define MIH_C_BIT_MIH_CMD_MIH_LINK_GET_PARAMETERS MIH_C_BIT_0_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_LINK_CONFIGURE_THRESHOLDS MIH_C_BIT_1_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_LINK_ACTIONS MIH_C_BIT_2_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_NET_HO_CANDIDATE_QUERY MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_NET_HO_COMMIT MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_N2N_HO_QUERY_RESOURCES MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_N2N_HO_COMMIT MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_N2N_HO_COMPLETE MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_MN_HO_CANDIDATE_QUERY MIH_C_BIT_4_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_MN_HO_COMMIT MIH_C_BIT_4_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_MN_HO_COMPLETE MIH_C_BIT_4_VALUE - -/*! \var MIH_C_MIH_CMD_LIST_T -* \brief A list of MIH commands. -* Bitmap Values: -* Bit 0: MIH_Link_Get_Parameters -* Bit 1: MIH_Link_Configure_Thresholds -* Bit 2: MIH_Link_Actions -* Bit 3: MIH_Net_HO_Candidate_Query -* MIH_Net_HO_Commit -* MIH_N2N_HO_Query_Resources -* MIH_N2N_HO_Commit -* MIH_N2N_HO_Complete -* Bit 4: MIH_MN_HO_Candidate_Query -* MIH_MN_HO_Commit -* MIH_MN_HO_Complete -* Bit 5–31: (Reserved) - -*/ -TYPEDEF_BITMAP32(MIH_C_MIH_CMD_LIST) - -//------------------------------------------- -#define MIH_C_BIT_MIH_LINK_DETECTED MIH_C_BIT_0_VALUE -#define MIH_C_BIT_MIH_LINK_UP MIH_C_BIT_1_VALUE -#define MIH_C_BIT_MIH_LINK_DOWN MIH_C_BIT_2_VALUE -#define MIH_C_BIT_MIH_LINK_PARAMETERS_REPORT MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_LINK_GOING_DOWN MIH_C_BIT_4_VALUE -#define MIH_C_BIT_MIH_LINK_HANDOVER_IMMINENT MIH_C_BIT_5_VALUE -#define MIH_C_BIT_MIH_LINK_HANDOVER_COMPLETE MIH_C_BIT_6_VALUE -#define MIH_C_BIT_MIH_LINK_PDU_TRANSMIT_STATUS MIH_C_BIT_7_VALUE -/*! \var MIH_C_MIH_EVT_LIST_T -* \brief A list of MIH events. -* Bitmap Values: -* Bit 0: MIH_Link_Detected -* Bit 1: MIH_Link_Up -* Bit 2: MIH_Link_Down -* Bit 3: MIH_Link_Parameters_Report -* Bit 4: MIH_Link_Going_Down -* Bit 5: MIH_Link_Handover_Imminent -* Bit 6: MIH_Link_Handover_Complete -* Bit 7: MIH_Link_PDU_Transmit_Status -* Bit 8–31: (Reserved) -*/ -TYPEDEF_BITMAP32(MIH_C_MIH_EVT_LIST) -//------------------------------------------- -#define MIH_C_BIT_BINARY_DATA MIH_C_BIT_0_VALUE -#define MIH_C_BIT_RDF_DATA MIH_C_BIT_1_VALUE -#define MIH_C_BIT_RDF_SCHEMA_URL MIH_C_BIT_2_VALUE -#define MIH_C_BIT_RDF_SCHEMA MIH_C_BIT_3_VALUE -#define MIH_C_BIT_IE_NETWORK_TYPE MIH_C_BIT_4_VALUE -#define MIH_C_BIT_IE_OPERATOR_ID MIH_C_BIT_5_VALUE -#define MIH_C_BIT_IE_SERVICE_PROVIDER_ID MIH_C_BIT_6_VALUE -#define MIH_C_BIT_IE_COUNTRY_CODE MIH_C_BIT_7_VALUE -#define MIH_C_BIT_IE_NETWORK_ID MIH_C_BIT_8_VALUE -#define MIH_C_BIT_IE_NETWORK_AUX_ID MIH_C_BIT_9_VALUE -#define MIH_C_BIT_IE_ROAMING_PARTNERS MIH_C_BIT_10_VALUE -#define MIH_C_BIT_IE_COST MIH_C_BIT_11_VALUE -#define MIH_C_BIT_IE_NETWORK_QOS MIH_C_BIT_12_VALUE -#define MIH_C_BIT_IE_NETWORK_DATA_RATE MIH_C_BIT_13_VALUE -#define MIH_C_BIT_IE_NET_REGULT_DOMAIN MIH_C_BIT_14_VALUE -#define MIH_C_BIT_IE_NET_FREQUENCY_BANDS MIH_C_BIT_15_VALUE -#define MIH_C_BIT_IE_NET_IP_CFG_METHODS MIH_C_BIT_16_VALUE -#define MIH_C_BIT_IE_NET_CAPABILITIES MIH_C_BIT_17_VALUE -#define MIH_C_BIT_IE_NET_SUPPORTED_LCP MIH_C_BIT_18_VALUE -#define MIH_C_BIT_IE_NET_MOB_MGMT_PROT MIH_C_BIT_19_VALUE -#define MIH_C_BIT_IE_NET_EMSERV_PROXY MIH_C_BIT_20_VALUE -#define MIH_C_BIT_IE_NET_IMS_PROXY_CSCF MIH_C_BIT_21_VALUE -#define MIH_C_BIT_IE_NET_MOBILE_NETWORK MIH_C_BIT_22_VALUE -#define MIH_C_BIT_IE_POA_LINK_ADDR MIH_C_BIT_23_VALUE -#define MIH_C_BIT_IE_POA_LOCATION MIH_C_BIT_24_VALUE -#define MIH_C_BIT_IE_POA_CHANNEL_RANGE MIH_C_BIT_25_VALUE -#define MIH_C_BIT_IE_POA_SYSTEM_INFO MIH_C_BIT_26_VALUE -#define MIH_C_BIT_IE_POA_SUBNET_INFO MIH_C_BIT_27_VALUE -#define MIH_C_BIT_IE_POA_IP_ADDR MIH_C_BIT_28_VALUE -/*! \var MIH_C_MIH_IQ_TYPE_LST_T -* \brief A list of IS query types. -* Bitmap Values: -* Bit 0: Binary data -* Bit 1: RDF data -* Bit 2: RDF schema URL -* Bit 3: RDF schema -* Bit 4: IE_NETWORK_TYPE -* Bit 5: IE_OPERATOR_ID -* Bit 6: IE_SERVICE_PROVIDER_ID -* Bit 7: IE_COUNTRY_CODE -* Bit 8: IE_NETWORK_ID -* Bit 9: IE_NETWORK_AUX_ID -* Bit 10: IE_ROAMING_PARTNERS -* Bit 11: IE_COST -* Bit 12: IE_NETWORK_QOS -* Bit 13: IE_NETWORK_DATA_RATE -* Bit 14: IE_NET_REGULT_DOMAIN -* Bit 15: IE_NET_FREQUENCY_BANDS -* Bit 16: IE_NET_IP_CFG_METHODS -* Bit 17: IE_NET_CAPABILITIES -* Bit 18: IE_NET_SUPPORTED_LCP -* Bit 19: IE_NET_MOB_MGMT_PROT -* Bit 20: IE_NET_EMSERV_PROXY -* Bit 21: IE_NET_IMS_PROXY_CSCF -* Bit 22: IE_NET_MOBILE_NETWORK -* Bit 23: IE_POA_LINK_ADDR -* Bit 24: IE_POA_LOCATION -* Bit 25: IE_POA_CHANNEL_RANGE -* Bit 26: IE_POA_SYSTEM_INFO -* Bit 27: IE_POA_SUBNET_INFO -* Bit 28: IE_POA_IP_ADDR -* Bit 29–63: (Reserved) -*/ -TYPEDEF_BITMAP64(MIH_C_MIH_IQ_TYPE_LST) -//------------------------------------------- -#define MIH_C_BIT_UDP MIH_C_BIT_0_VALUE -#define MIH_C_BIT_TCP MIH_C_BIT_1_VALUE -/*! \var MIH_C_MIH_TRANS_LST_T -* \brief A list of supported transports. -* Bitmap Values: -* Bit 0: UDP -* Bit 1: TCP -* Bit 2–15: (Reserved) -*/ -TYPEDEF_BITMAP16(MIH_C_MIH_TRANS_LST) -//------------------------------------------- -/*! \struct MIH_C_NET_TYPE_ADDR_T -* \brief Represent a link address of a specific network type. -*/ -typedef struct MIH_C_NET_TYPE_ADDR { - MIH_C_NETWORK_TYPE_T network_type; - MIH_C_LINK_ADDR_T link_addr; -} MIH_C_NET_TYPE_ADDR_T; -//------------------------------------------- -/** @}*/ - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.22—Data types for handover operation -//----------------------------------------------------------------------------- -/** \defgroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION Data type for handover operation - * \ingroup MIH_C_INTERFACE - * - * @{ - */ -//TBD ASGN_RES_SET -/*! \var MIH_C_HO_CAUSE_T -* \brief Represents the reason for performing a handover. -* Same enumeration list as link down reason code. -* See Table F.7 -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_HO_CAUSE) -//------------------------------------------- -/*! \var MIH_C_HO_RESULT_T -* \brief Handover result. -* 0: Success -* 1: Failure -* 2: Rejected -*/ -TYPEDEF_ENUMERATED(MIH_C_HO_RESULT) -#define MIH_C_HO_RESULT_SUCCESS (MIH_C_HO_RESULT_T)0 -#define MIH_C_HO_RESULT_FAILURE (MIH_C_HO_RESULT_T)1 -#define MIH_C_HO_RESULT_REJECTED (MIH_C_HO_RESULT_T)2 -//------------------------------------------- -/*! \var MIH_C_HO_STATUS_T -* \brief Represents the permission for handover. -* 0: HandoverPermitted -* 1: HandoverDeclined -*/ -TYPEDEF_ENUMERATED(MIH_C_HO_STATUS) -#define MIH_C_HO_STATUS_HANDOVER_PERMITTED (MIH_C_HO_STATUS_T)0 -#define MIH_C_HO_STATUS_HANDOVER_DECLINED (MIH_C_HO_STATUS_T)1 -//------------------------------------------- -/*! \var MIH_C_PREDEF_CFG_ID_T -* \brief Pre-defined configuration identifier. -* 0..255 -*/ -TYPEDEF_INTEGER1(MIH_C_PREDEF_CFG_ID) -//------------------------------------------- -//TBD RQ_RESULT -//TBD REQ_RES_SET -//TBD TGT_NET_INFO -//TBD TSP_CARRIER -//TBD TSP_CONTAINER -/** @}*/ - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.23—Data type for MIH_NET_SAP primitives -//----------------------------------------------------------------------------- -/** \defgroup MIH_C_F23_DATA_TYPE_FOR_MIH_NET_SAP_PRIMITIVES Data type for MIH NET SAP primitives. - * \ingroup MIH_C_INTERFACE - * - * @{ - */ -/*! \var MIH_C_TRANSPORT_TYPE_T -* \brief The transport type supported: -* 0: L2 -* 1: L3 or higher layer protocols -*/ -TYPEDEF_ENUMERATED(MIH_C_TRANSPORT_TYPE) -#define MIH_C_TRANSPORT_TYPE_L2 (MIH_C_TRANSPORT_TYPE_T)0 -#define MIH_C_TRANSPORT_TYPE_L3_OR_HIGHER_PROTOCOLS (MIH_C_TRANSPORT_TYPE_T)1 - -/** @}*/ - - - - -/** - * \ingroup MIH_C_INTERFACE - * - * @{ - */ - -#define MIH_C_TLV_SOURCE_MIHF_ID (MIH_C_INTEGER1_T)1 -#define MIH_C_TLV_DESTINATION_MIHF_ID (MIH_C_INTEGER1_T)2 -#define MIH_C_TLV_STATUS (MIH_C_INTEGER1_T)3 -#define MIH_C_TLV_LINK_TYPE (MIH_C_INTEGER1_T)4 -#define MIH_C_TLV_MIH_EVENT_LIST (MIH_C_INTEGER1_T)5 -#define MIH_C_TLV_MIH_COMMAND_LIST (MIH_C_INTEGER1_T)6 -#define MIH_C_TLV_MIIS_QUERY_TYPE_LIST (MIH_C_INTEGER1_T)7 -#define MIH_C_TLV_TRANSPORT_OPTION_LIST (MIH_C_INTEGER1_T)8 -#define MIH_C_TLV_LINK_ADDRESS_LIST (MIH_C_INTEGER1_T)9 -#define MIH_C_TLV_MBB_HANDOVER_SUPPORT (MIH_C_INTEGER1_T)10 -#define MIH_C_TLV_REGISTER_REQUEST_CODE (MIH_C_INTEGER1_T)11 -#define MIH_C_TLV_VALID_TIME_INTERVAL (MIH_C_INTEGER1_T)12 -#define MIH_C_TLV_LINK_IDENTIFIER (MIH_C_INTEGER1_T)13 -#define MIH_C_TLV_NEW_LINK_IDENTIFIER (MIH_C_INTEGER1_T)14 -#define MIH_C_TLV_OLD_ACCESS_ROUTER (MIH_C_INTEGER1_T)15 -#define MIH_C_TLV_NEW_ACCESS_ROUTER (MIH_C_INTEGER1_T)16 -#define MIH_C_TLV_IP_RENEWAL_FLAG (MIH_C_INTEGER1_T)17 -#define MIH_C_TLV_MOBILITY_MANAGEMENT_SUPPORT (MIH_C_INTEGER1_T)18 -#define MIH_C_TLV_IP_ADDRESS_CONFIGURATION_METHODS (MIH_C_INTEGER1_T)19 -#define MIH_C_TLV_LINK_DOWN_REASON_CODE (MIH_C_INTEGER1_T)20 -#define MIH_C_TLV_LINK_TIME_INTERVAL (MIH_C_INTEGER1_T)21 -#define MIH_C_TLV_LINK_GOING_DOWN_REASON_CODE (MIH_C_INTEGER1_T)22 -#define MIH_C_TLV_LINK_PARAMETER_REPORT_LIST (MIH_C_INTEGER1_T)23 -#define MIH_C_TLV_DEVICE_STATES_REQUEST (MIH_C_INTEGER1_T)24 -#define MIH_C_TLV_LINK_IDENTIFIER_LIST (MIH_C_INTEGER1_T)25 -#define MIH_C_TLV_DEVICE_STATES_RESPONSE_LIST (MIH_C_INTEGER1_T)26 -#define MIH_C_TLV_GET_STATUS_REQUEST_SET (MIH_C_INTEGER1_T)27 -#define MIH_C_TLV_GET_STATUS_RESPONSE_LIST (MIH_C_INTEGER1_T)28 -#define MIH_C_TLV_CONFIGURE_REQUEST_LIST (MIH_C_INTEGER1_T)29 -#define MIH_C_TLV_CONFIGURE_RESPONSE_LIST (MIH_C_INTEGER1_T)30 -#define MIH_C_TLV_LIST_OF_LINK_POA_LIST (MIH_C_INTEGER1_T)31 -#define MIH_C_TLV_PREFERRED_LINK_LIST (MIH_C_INTEGER1_T)32 -#define MIH_C_TLV_HANDOVER_RESOURCE_QUERY_LIST (MIH_C_INTEGER1_T)33 -#define MIH_C_TLV_HANDOVER_STATUS (MIH_C_INTEGER1_T)34 -#define MIH_C_TLV_ACCESS_ROUTER_ADDRESS (MIH_C_INTEGER1_T)35 -#define MIH_C_TLV_DHCP_SERVER_ADDRESS (MIH_C_INTEGER1_T)36 -#define MIH_C_TLV_FA_ADDRESS (MIH_C_INTEGER1_T)37 -#define MIH_C_TLV_LINK_ACTIONS_LIST (MIH_C_INTEGER1_T)38 -#define MIH_C_TLV_LINK_ACTIONS_RESULT_LIST (MIH_C_INTEGER1_T)39 -#define MIH_C_TLV_HANDOVER_RESULT (MIH_C_INTEGER1_T)40 -#define MIH_C_TLV_RESOURCE_STATUS (MIH_C_INTEGER1_T)41 -#define MIH_C_TLV_RESOURCE_RETENTION_STATUS (MIH_C_INTEGER1_T)42 -#define MIH_C_TLV_INFO_QUERY_BINARY_DATA_LIST (MIH_C_INTEGER1_T)43 -#define MIH_C_TLV_INFO_QUERY_RDF_DATA_LIST (MIH_C_INTEGER1_T)44 -#define MIH_C_TLV_INFO_QUERY_RDF_SCHEMA_URL (MIH_C_INTEGER1_T)45 -#define MIH_C_TLV_INFO_QUERY_RDF_SCHEMA_LIST (MIH_C_INTEGER1_T)46 -#define MIH_C_TLV_MAX_RESPONSE_SIZE (MIH_C_INTEGER1_T)47 -#define MIH_C_TLV_INFO_RESPONSE_BINARY_DATA_LIST (MIH_C_INTEGER1_T)48 -#define MIH_C_TLV_INFO_RESPONSE_RDF_DATA_LIST (MIH_C_INTEGER1_T)49 -#define MIH_C_TLV_INFO_RESPONSE_RDF_SCHEMA_URL_LIST (MIH_C_INTEGER1_T)50 -#define MIH_C_TLV_INFO_RESPONSE_RDF_SCHEMA_LIST (MIH_C_INTEGER1_T)51 -#define MIH_C_TLV_MOBILE_NODE_MIHF_ID (MIH_C_INTEGER1_T)52 -#define MIH_C_TLV_QUERY_RESOURCE_REPORT_FLAG (MIH_C_INTEGER1_T)53 -#define MIH_C_TLV_EVENT_CONFIGURATION_INFO_LIST (MIH_C_INTEGER1_T)54 -#define MIH_C_TLV_TARGET_NETWORK_INFO (MIH_C_INTEGER1_T)55 -#define MIH_C_TLV_LIST_OF_TARGET_NETWORK_INFO (MIH_C_INTEGER1_T)56 -#define MIH_C_TLV_ASSIGNED_RESOURCE_SET (MIH_C_INTEGER1_T)57 -#define MIH_C_TLV_LINK_DETECTED_INFO_LIST (MIH_C_INTEGER1_T)58 -#define MIH_C_TLV_MN_LINK_ID (MIH_C_INTEGER1_T)59 -#define MIH_C_TLV_POA (MIH_C_INTEGER1_T)60 -#define MIH_C_TLV_UNAUTHENTICATED_INFORMATION_REQUEST (MIH_C_INTEGER1_T)61 -#define MIH_C_TLV_NETWORK_TYPE (MIH_C_INTEGER1_T)62 -#define MIH_C_TLV_REQUESTED_RESOURCE_SET (MIH_C_INTEGER1_T)63 - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -# define MIH_C_TLV_LINK_EVENT_LIST (MIH_C_INTEGER1_T)101 -# define MIH_C_TLV_LINK_CMD_LIST (MIH_C_INTEGER1_T)102 -# define MIH_C_TLV_LINK_PARAM_TYPE_LIST (MIH_C_INTEGER1_T)103 -# define MIH_C_TLV_LINK_PARAMETERS_STATUS_LIST (MIH_C_INTEGER1_T)104 -# define MIH_C_TLV_LINK_STATES_REQ (MIH_C_INTEGER1_T)105 -# define MIH_C_TLV_LINK_STATES_RSP_LIST (MIH_C_INTEGER1_T)106 -# define MIH_C_TLV_LINK_DESC_REQ (MIH_C_INTEGER1_T)107 -# define MIH_C_TLV_LINK_DESC_RSP_LIST (MIH_C_INTEGER1_T)108 -# define MIH_C_TLV_LINK_ACTION (MIH_C_INTEGER1_T)109 -# define MIH_C_TLV_LINK_AC_RESULT (MIH_C_INTEGER1_T)110 -# define MIH_C_TLV_LINK_SCAN_RSP_LIST (MIH_C_INTEGER1_T)111 -# define MIH_C_TLV_LINK_DET_INFO (MIH_C_INTEGER1_T)112 -# define MIH_C_TLV_LINK_INTERFACE_TYPE_ADDR (MIH_C_INTEGER1_T)113 -# define MIH_C_TLV_MOS_DSCV (MIH_C_INTEGER1_T)114 -#endif -/** @}*/ - -//----------------------------------------------------------------------------- -#endif +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see <http://www.gnu.org/licenses/>. + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ +/*! \file MIH_C_Types.h + * \brief This file defines the 802.21 types or constants defined in Std 802.21-2008 Table F1, F2, F3, + * F4, F5, F6, F7, F8, F9, F12, F13, F19, F20, F22, L2. Some tables may be not implemented at all. + * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \date 2012 + * \version + * \note + * \bug + * \warning + */ +#ifndef __MIH_C_LINK_TYPES_H__ +#define __MIH_C_LINK_TYPES_H__ +#include <sys/types.h> +#include <linux/types.h> + +#ifndef USER_MODE +# define USER_MODE +# warning "Hack USER_MODE" +#endif +//----------------------------------------------------------------------------- +#include "MIH_C_Link_Constants.h" +#include "MIH_C_bit_buffer.h" +//----------------------------------------------------------------------------- +#define MIH_C_DEBUG_SERIALIZATION 1 +#define MIH_C_DEBUG_DESERIALIZATION 1 +//----------------------------------------------------------------------------- +#define STR(x) #x + +/** \defgroup MIH_C_INTERFACE 802.21 interface + * + */ + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.1 Basic data types +//----------------------------------------------------------------------------- + + +//----------------------- BITMAP(size) ---------------------------------------- +/*! \var typedef u_int8_t MIH_C_BITMAP8_T; + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A type definition for u_int8_t. + */ +typedef u_int8_t MIH_C_BITMAP8_T; +/*! \var typedef u_int16_t MIH_C_BITMAP16_T; + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A type definition for u_int16_t. + */ +typedef u_int16_t MIH_C_BITMAP16_T; +/*! \struct MIH_C_BITMAP24_T + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + */ +typedef struct MIH_C_BITMAP24 {u_int8_t val[3];}__attribute__((__packed__)) MIH_C_BITMAP24_T; +/*! \var typedef u_int32_t MIH_C_BITMAP32_T; + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A type definition for u_int32_t. + */ +typedef u_int32_t MIH_C_BITMAP32_T; +/*! \var typedef u_int64_t MIH_C_BITMAP64_T; + * \brief A type definition for u_int64_t. + */ +typedef u_int64_t MIH_C_BITMAP64_T; +/*! \struct MIH_C_BITMAP128_T + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + */ +typedef struct MIH_C_BITMAP128 {u_int64_t val[2];}__attribute__((__packed__)) MIH_C_BITMAP128_T; +/*! \struct MIH_C_BITMAP256_T + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + */ +typedef struct MIH_C_BITMAP256 {u_int64_t val[4];}__attribute__((__packed__)) MIH_C_BITMAP256_T; + +#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C + /*! \def TYPEDEF_BITMAP6(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP8_T. + */ + #define TYPEDEF_BITMAP6(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ + void MIH_C_BITMAP8_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ + void MIH_C_BITMAP8_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ + inline unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ + return sprintf(buffP, "0x%02X", *bitmapP);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ + MIH_C_BITMAP8_encode(bbP, bitmapP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP8_decode(bbP, bitmapP);}; + + /*! \def TYPEDEF_BITMAP8(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP8_T. + */ + #define TYPEDEF_BITMAP8(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ + void MIH_C_BITMAP8_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ + void MIH_C_BITMAP8_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ + return sprintf(buffP, "0x%02X", *bitmapP);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ + MIH_C_BITMAP8_encode(bbP, bitmapP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP8_decode(bbP, bitmapP);}; + + /*! \def TYPEDEF_BITMAP16(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP16_T. + */ + #define TYPEDEF_BITMAP16(DATA_TYPE_NAME) typedef MIH_C_BITMAP16_T DATA_TYPE_NAME ## _T;\ + void MIH_C_BITMAP16_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP16_T* dataP);\ + void MIH_C_BITMAP16_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP16_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ + return sprintf(buffP, "0x%04X", *bitmapP);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ + MIH_C_BITMAP16_encode(bbP, bitmapP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP16_decode(bbP, bitmapP);}; + + /*! \def TYPEDEF_BITMAP20(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP24_T. + */ + #define TYPEDEF_BITMAP20(DATA_TYPE_NAME) typedef MIH_C_BITMAP24_T DATA_TYPE_NAME ## _T;\ + void MIH_C_BITMAP24_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP24_T* dataP);\ + void MIH_C_BITMAP24_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP24_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ + return sprintf(buffP, "0x%02X%02X%02X", bitmapP->val[0], bitmapP->val[1], bitmapP->val[2]);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ + MIH_C_BITMAP24_encode(bbP, bitmapP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP24_decode(bbP, bitmapP);}; + + /*! \def TYPEDEF_BITMAP32(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP32_T. + */ + #define TYPEDEF_BITMAP32(DATA_TYPE_NAME) typedef MIH_C_BITMAP32_T DATA_TYPE_NAME ## _T;\ + void MIH_C_BITMAP32_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP32_T* dataP);\ + void MIH_C_BITMAP32_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP32_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ + return sprintf(buffP, "0x%08X", *bitmapP);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ + MIH_C_BITMAP32_encode(bbP, bitmapP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP32_decode(bbP, bitmapP);}; + + /*! \def TYPEDEF_BITMAP64(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP64_T. + */ + #define TYPEDEF_BITMAP64(DATA_TYPE_NAME) typedef MIH_C_BITMAP64_T DATA_TYPE_NAME ## _T;\ + void MIH_C_BITMAP64_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP64_T* dataP);\ + void MIH_C_BITMAP64_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP64_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ + unsigned int buffer_index = 0;\ + buffer_index = sprintf(buffP, "0x%08x", (MIH_C_UNSIGNED_INT4_T)(*bitmapP>>32));\ + buffer_index = sprintf(&buffP[buffer_index], "%08x", (MIH_C_UNSIGNED_INT4_T)(*bitmapP));\ + return buffer_index;\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ + MIH_C_BITMAP64_encode(bbP, bitmapP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP64_decode(bbP, bitmapP);}; + + /*! \def TYPEDEF_BITMAP128(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP128_T. + */ + #define TYPEDEF_BITMAP128(DATA_TYPE_NAME) typedef MIH_C_BITMAP128_T DATA_TYPE_NAME ## _T;\ + void MIH_C_BITMAP128_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP128_T* dataP);\ + void MIH_C_BITMAP128_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP128_T* dataP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP128_encode(bbP, bitmapP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP128_decode(bbP, bitmapP);}; + + /*! \def TYPEDEF_BITMAP256(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP256_T. + */ + #define TYPEDEF_BITMAP256(DATA_TYPE_NAME) typedef MIH_C_BITMAP256_T DATA_TYPE_NAME ## _T;\ + void MIH_C_BITMAP256_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP256_T* dataP);\ + void MIH_C_BITMAP256_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP256_T* dataP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP256_encode(bbP, bitmapP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP256_decode(bbP, bitmapP);}; + +#else + #define TYPEDEF_BITMAP6(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); + + #define TYPEDEF_BITMAP8(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); + + #define TYPEDEF_BITMAP16(DATA_TYPE_NAME) typedef MIH_C_BITMAP16_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); + + #define TYPEDEF_BITMAP20(DATA_TYPE_NAME) typedef MIH_C_BITMAP24_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); + + #define TYPEDEF_BITMAP32(DATA_TYPE_NAME) typedef MIH_C_BITMAP32_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); + + #define TYPEDEF_BITMAP64(DATA_TYPE_NAME) typedef MIH_C_BITMAP64_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); + + #define TYPEDEF_BITMAP128(DATA_TYPE_NAME) typedef MIH_C_BITMAP128_T DATA_TYPE_NAME ## _T;\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); + + #define TYPEDEF_BITMAP256(DATA_TYPE_NAME) typedef MIH_C_BITMAP256_T DATA_TYPE_NAME ## _T;\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); +#endif + +#define BITMAP6(VAR_NAME) MIH_C_BITMAP8_T VAR_NAME; +#define BITMAP8(VAR_NAME) MIH_C_BITMAP8_T VAR_NAME; +#define BITMAP16(VAR_NAME) MIH_C_BITMAP16_T VAR_NAME; +#define BITMAP20(VAR_NAME) MIH_C_BITMAP24_T VAR_NAME; +#define BITMAP24(VAR_NAME) MIH_C_BITMAP24_T VAR_NAME; +#define BITMAP32(VAR_NAME) MIH_C_BITMAP32_T VAR_NAME; +#define BITMAP64(VAR_NAME) MIH_C_BITMAP64_T VAR_NAME; +#define BITMAP128(VAR_NAME) MIH_C_BITMAP128_T VAR_NAME; +#define BITMAP256(VAR_NAME) MIH_C_BITMAP256_T VAR_NAME; + +//----------------------- CHOICE(DATATYPE1, DATATYPE2[,...]) ------------------ +/*! \var typedef u_int8_t MIH_C_CHOICE_T; + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A type definition for u_int8_t. + */ +typedef u_int8_t MIH_C_CHOICE_T; + +//----------------------- INTEGER(size) --------------------------------------- +/*! \var typedef int8_t MIH_C_INTEGER1_T; + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A type definition for int8_t. + */ +typedef int8_t MIH_C_INTEGER1_T; +/*! \var typedef int16_t MIH_C_INTEGER2_T; + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A type definition for int16_t. + */ +typedef int16_t MIH_C_INTEGER2_T; +/*! \var typedef int32_t MIH_C_INTEGER4_T; + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A type definition for int32_t. + */ +typedef int32_t MIH_C_INTEGER4_T; +/*! \var typedef int64_t MIH_C_INTEGER8_T; + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A type definition for int64_t. + */ +typedef int64_t MIH_C_INTEGER8_T; + +#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C + /*! \def TYPEDEF_INTEGER1(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER1_T. + */ + #define TYPEDEF_INTEGER1(DATA_TYPE_NAME) typedef MIH_C_INTEGER1_T DATA_TYPE_NAME ## _T;\ + void MIH_C_INTEGER1_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER1_T* dataP);\ + void MIH_C_INTEGER1_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER1_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ + return sprintf(buffP, "0x%02X", *dataP);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_INTEGER1_encode(bbP, (MIH_C_INTEGER1_T*)dataP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_INTEGER1_decode(bbP, (MIH_C_INTEGER1_T*)dataP);\ + }; + + /*! \def TYPEDEF_INTEGER2(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER2_T. + */ + #define TYPEDEF_INTEGER2(DATA_TYPE_NAME) typedef MIH_C_INTEGER2_T DATA_TYPE_NAME ## _T;\ + void MIH_C_INTEGER2_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER2_T* dataP);\ + void MIH_C_INTEGER2_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER2_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ + return sprintf(buffP, "0x%04X", *dataP);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_INTEGER2_encode(bbP, (MIH_C_INTEGER2_T*)dataP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_INTEGER2_decode(bbP, (MIH_C_INTEGER2_T*)dataP);\ + }; + + /*! \def TYPEDEF_INTEGER4(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER4_T. + */ + #define TYPEDEF_INTEGER4(DATA_TYPE_NAME) typedef MIH_C_INTEGER4_T DATA_TYPE_NAME ## _T;\ + void MIH_C_INTEGER4_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER4_T* dataP);\ + void MIH_C_INTEGER4_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER4_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ + return sprintf(buffP, "0x%08X", (MIH_C_INTEGER4_T)*dataP);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_INTEGER4_encode(bbP, (MIH_C_INTEGER4_T*)dataP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_INTEGER4_decode(bbP, (MIH_C_INTEGER4_T*)dataP);\ + }; + + /*! \def TYPEDEF_INTEGER8(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER48T. + */ + #define TYPEDEF_INTEGER8(DATA_TYPE_NAME) typedef MIH_C_INTEGER8_T DATA_TYPE_NAME ## _T;\ + void MIH_C_INTEGER8_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER8_T* dataP);\ + void MIH_C_INTEGER8_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER8_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ + unsigned int buffer_index = 0;\ + buffer_index = sprintf(buffP, "0x%08x", (MIH_C_UNSIGNED_INT4_T)(*dataP>>32));\ + buffer_index = sprintf(&buffP[buffer_index], "%08x", (MIH_C_UNSIGNED_INT4_T)(*dataP));\ + return buffer_index;\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_INTEGER8_encode(bbP, (MIH_C_INTEGER8_T*)dataP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_INTEGER8_decode(bbP, (MIH_C_INTEGER8_T*)dataP);\ + }; +#else + #define TYPEDEF_INTEGER1(DATA_TYPE_NAME) typedef MIH_C_INTEGER1_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); + + #define TYPEDEF_INTEGER2(DATA_TYPE_NAME) typedef MIH_C_INTEGER2_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); + + #define TYPEDEF_INTEGER4(DATA_TYPE_NAME) typedef MIH_C_INTEGER4_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); + + #define TYPEDEF_INTEGER8(DATA_TYPE_NAME) typedef MIH_C_INTEGER8_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); +#endif + +/*! \def INTEGER1(VAR_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A variable declaration of type MIH_C_INTEGER1_T. + */ +#define INTEGER1(VAR_NAME) MIH_C_INTEGER1_T VAR_NAME; +/*! \def INTEGER2(VAR_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A variable declaration of type MIH_C_INTEGER2_T. + */ +#define INTEGER2(VAR_NAME) MIH_C_INTEGER2_T VAR_NAME; +/*! \def INTEGER4(VAR_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A variable declaration of type MIH_C_INTEGER4_T. + */ +#define INTEGER4(VAR_NAME) MIH_C_INTEGER4_T VAR_NAME; +/*! \def INTEGER8(VAR_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A variable declaration of type MIH_C_INTEGER8_T. + */ +#define INTEGER8(VAR_NAME) MIH_C_INTEGER8_T VAR_NAME; + + +//----------------------- UNSIGNED_INT(size) ---------------------------------- +/*! \var typedef int8_t MIH_C_UNSIGNED_INT1_T; + * \brief A type definition for int8_t. + */ +typedef u_int8_t MIH_C_UNSIGNED_INT1_T; +/*! \var u_int16_t MIH_C_UNSIGNED_INT2_T + * \brief A type definition for u_int16_t. + */ +typedef u_int16_t MIH_C_UNSIGNED_INT2_T; +/*! \var typedef u_int32_t MIH_C_UNSIGNED_INT4_T; + * \brief A type definition for u_int32_t. + */ +typedef u_int32_t MIH_C_UNSIGNED_INT4_T; +/*! \var u_int64_t MIH_C_UNSIGNED_INT8_T; + * \brief A type definition for u_int64_t. + */ +typedef u_int64_t MIH_C_UNSIGNED_INT8_T; + +#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C + /*! \def TYPEDEF_UNSIGNED_INT1(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT1_T. + */ + #define TYPEDEF_UNSIGNED_INT1(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT1_T DATA_TYPE_NAME ## _T;\ + void MIH_C_UNSIGNED_INT1_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT1_T* dataP);\ + void MIH_C_UNSIGNED_INT1_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT1_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ + return sprintf(buffP, "0x%02X", *dataP);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_UNSIGNED_INT1_encode(bbP, dataP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_UNSIGNED_INT1_decode(bbP, dataP);\ + }; + + /*! \def TYPEDEF_UNSIGNED_INT2(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT2_T. + */ + #define TYPEDEF_UNSIGNED_INT2(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT2_T DATA_TYPE_NAME ## _T;\ + void MIH_C_UNSIGNED_INT2_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT2_T* dataP);\ + void MIH_C_UNSIGNED_INT2_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT2_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ + return sprintf(buffP, "0x%04X", *dataP);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_UNSIGNED_INT2_encode(bbP, dataP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_UNSIGNED_INT2_decode(bbP, dataP);\ + }; + + /*! \def TYPEDEF_UNSIGNED_INT4(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT4_T. + */ + #define TYPEDEF_UNSIGNED_INT4(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT4_T DATA_TYPE_NAME ## _T;\ + void MIH_C_UNSIGNED_INT4_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT4_T* dataP);\ + void MIH_C_UNSIGNED_INT4_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT4_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ + return sprintf(buffP, "0x%08X", *dataP);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_UNSIGNED_INT4_encode(bbP, dataP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_UNSIGNED_INT4_decode(bbP, dataP);\ + }; + + /*! \def TYPEDEF_UNSIGNED_INT8(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT8_T. + */ + #define TYPEDEF_UNSIGNED_INT8(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT8_T DATA_TYPE_NAME ## _T;\ + void MIH_C_UNSIGNED_INT8_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT8_T* dataP);\ + void MIH_C_UNSIGNED_INT8_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT8_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ + return sprintf(buffP, "0x%16X", *dataP);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_UNSIGNED_INT8_encode(bbP, dataP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_UNSIGNED_INT8_decode(bbP, dataP);\ + }; +#else + #define TYPEDEF_UNSIGNED_INT1(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT1_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); + + #define TYPEDEF_UNSIGNED_INT2(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT2_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); + + #define TYPEDEF_UNSIGNED_INT4(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT4_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); + + #define TYPEDEF_UNSIGNED_INT8(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT8_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); +#endif + +/*! \def UNSIGNED_INT1(VAR_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A variable declaration of type MIH_C_UNSIGNED_INT1_T. + */ +#define UNSIGNED_INT1(VAR_NAME) MIH_C_UNSIGNED_INT1_T VAR_NAME; +/*! \def UNSIGNED_INT2(VAR_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A variable declaration of type MIH_C_UNSIGNED_INT2_T. + */ +#define UNSIGNED_INT2(VAR_NAME) MIH_C_UNSIGNED_INT2_T VAR_NAME; +/*! \def UNSIGNED_INT4(VAR_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A variable declaration of type MIH_C_UNSIGNED_INT4_T. + */ +#define UNSIGNED_INT4(VAR_NAME) MIH_C_UNSIGNED_INT4_T VAR_NAME; +/*! \def UNSIGNED_INT8(VAR_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A variable declaration of type MIH_C_UNSIGNED_INT8_T. + */ +#define UNSIGNED_INT8(VAR_NAME) MIH_C_UNSIGNED_INT8_T VAR_NAME; + +//----------------------- LIST(DATATYPE) -------------------------------------- +void MIH_C_LIST_LENGTH_encode(Bit_Buffer_t *bbP, u_int16_t lengthP); +void MIH_C_LIST_LENGTH_decode(Bit_Buffer_t *bbP, u_int16_t *lengthP); +u_int16_t MIH_C_LIST_LENGTH_get_encode_length(u_int16_t lengthP); + +#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C + /*! \def TYPEDEF_LIST(DATA_TYPE_NAME, MAX_LENGTH) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a LIST of MAX_LENGTH elements of DATA_TYPE_NAME type, and its functions for de/serializing this type. + */ +#define TYPEDEF_LIST(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME ## _LIST { u_int16_t length; DATA_TYPE_NAME ## _T val[MAX_LENGTH];} DATA_TYPE_NAME ## _LIST_T;\ + extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *val);\ + extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *val);\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *val, char* bufP);\ + unsigned int DATA_TYPE_NAME ## _LIST2String(DATA_TYPE_NAME ## _LIST_T *listP, char* bufP) {\ + int index = 0;\ + unsigned int buffer_index = 0;\ + while ((index < listP->length) && (index < MAX_LENGTH)){\ + buffer_index += sprintf(&bufP[buffer_index], "%s (%d) = ", STR(DATA_TYPE_NAME) , index);\ + buffer_index += DATA_TYPE_NAME ## 2String(&listP->val[index], &bufP[buffer_index]);\ + buffer_index += sprintf(&bufP[buffer_index], " ");\ + index = index + 1;\ + }\ + return buffer_index;\ + };\ + void DATA_TYPE_NAME ## _LIST_decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP) {\ + int index = 0;\ + MIH_C_LIST_LENGTH_decode(bbP, &listP->length);\ + if (listP->length > MAX_LENGTH) {printf("[MIH_C] ERROR DATA_TYPE_NAME ## _LIST_decode num elements in list out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ + } else {\ + while ((index < listP->length) && (index < MAX_LENGTH)){\ + DATA_TYPE_NAME ## _decode(bbP, &listP->val[index++]);\ + }\ + }\ + };\ + void DATA_TYPE_NAME ## _LIST_encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP) {\ + int index = 0;\ + if (listP->length > MAX_LENGTH) {\ + printf("[MIH_C] ERROR DATA_TYPE_NAME ## _LIST_encode num elements in list out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ + } else {\ + MIH_C_LIST_LENGTH_encode(bbP, listP->length);\ + while (index < listP->length) {\ + DATA_TYPE_NAME ## _encode(bbP, &listP->val[index++]);\ + }\ + }\ + };\ + void DATA_TYPE_NAME ## _LIST_init(DATA_TYPE_NAME ## _LIST_T *listP) {\ + listP->length = 0;\ + memset(listP->val, 0, MAX_LENGTH*sizeof(DATA_TYPE_NAME ## _T));\ + }; + +#else +#define TYPEDEF_LIST(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME ## _LIST { u_int16_t length; DATA_TYPE_NAME ## _T val[MAX_LENGTH];} DATA_TYPE_NAME ## _LIST_T;\ + extern unsigned int DATA_TYPE_NAME ## _LIST2String(DATA_TYPE_NAME ## _LIST_T *listP, char* bufP);\ + extern void DATA_TYPE_NAME ## _LIST_decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP);\ + extern void DATA_TYPE_NAME ## _LIST_encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP);\ + extern void DATA_TYPE_NAME ## _LIST_init(DATA_TYPE_NAME ## _LIST_T *listP); +#endif +#define LIST(DATA_TYPE_NAME, VAR_NAME) DATA_TYPE_NAME ## _LIST_T VAR_NAME ## _list; + + + +//----------------------- NULL ------------------------------------------------ +#define MIH_C_NULL_T u_int8_t + +//----------------------- OCTET(size) ----------------------------------------- +#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C + /*! \def TYPEDEF_OCTET(DATA_TYPE_NAME, MAX_LENGTH) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a LIST of MAX_LENGTH octet elements, and its functions for de/serializing this type. + */ +#define TYPEDEF_OCTET(DATA_TYPE_NAME, LENGTH) typedef struct DATA_TYPE_NAME {u_int8_t val[LENGTH];} DATA_TYPE_NAME ## _T;\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP) {\ + int index = 0;\ + unsigned int buffer_index = 0;\ + while ( index < LENGTH ){\ + buffer_index += sprintf(&bufP[buffer_index], "%02X", dataP->val[index]);\ + index = index + 1;\ + }\ + return buffer_index;\ + };\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) { BitBuffer_readMem(bbP, &dataP->val[0], LENGTH);};\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) { BitBuffer_writeMem(bbP, &dataP->val[0], LENGTH);}; +#else +#define TYPEDEF_OCTET(DATA_TYPE_NAME, LENGTH) typedef struct DATA_TYPE_NAME {u_int8_t val[LENGTH];} DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP);\ + extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); +#endif + +//----------------------- SEQUENCE(DATATYPE1, DATATYPE2[,...]) : NO MACRO ----- + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.2 General data types +//----------------------------------------------------------------------------- + +//----------------------- ENUMERATED ------------------------------------------ +TYPEDEF_UNSIGNED_INT1(MIH_C_ENUMERATED) + +#ifdef MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C + /*! \def TYPEDEF_ENUMERATED(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as MIH_C_ENUMERATED_T, and its functions for de/serializing this type. + */ + #define TYPEDEF_ENUMERATED(DATA_TYPE_NAME) typedef MIH_C_ENUMERATED_T DATA_TYPE_NAME ## _T;\ + void MIH_C_ENUMERATED_encode(Bit_Buffer_t* bbP, MIH_C_ENUMERATED_T* dataP);\ + void MIH_C_ENUMERATED_decode(Bit_Buffer_t* bbP, MIH_C_ENUMERATED_T* dataP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_ENUMERATED_encode(bbP, dataP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {MIH_C_ENUMERATED_decode(bbP, dataP);}; +#else + #define TYPEDEF_ENUMERATED(DATA_TYPE_NAME) typedef MIH_C_ENUMERATED_T DATA_TYPE_NAME ## _T;\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); +#endif + +/*! \def ENUMERATED(VAR_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A variable declaration of type MIH_C_ENUMERATED_T. + */ +#define ENUMERATED(VAR_NAME) MIH_C_ENUMERATED_T VAR_NAME; + + +//----------------------- BOOLEAN --------------------------------------------- +TYPEDEF_ENUMERATED(MIH_C_BOOLEAN) + +#define MIH_C_BOOLEAN_TRUE (MIH_C_ENUMERATED_T)1 +#define MIH_C_BOOLEAN_FALSE (MIH_C_ENUMERATED_T)0 +#ifdef MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C + /*! \def TYPEDEF_BOOLEAN(DATA_TYPE_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as MIH_C_BOOLEAN_T, and its functions for de/serializing this type. + */ + #define TYPEDEF_BOOLEAN(DATA_TYPE_NAME) typedef MIH_C_BOOLEAN_T DATA_TYPE_NAME ## _T;\ + void MIH_C_BOOLEAN_encode(Bit_Buffer_t* bbP, MIH_C_BOOLEAN_T* dataP);\ + void MIH_C_BOOLEAN_decode(Bit_Buffer_t* bbP, MIH_C_BOOLEAN_T* dataP);\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP) {\ + unsigned int buffer_index = 0;\ + if (*dataP != MIH_C_BOOLEAN_FALSE) {\ + buffer_index += sprintf(&bufP[buffer_index], "TRUE");\ + } else {\ + buffer_index += sprintf(&bufP[buffer_index], "FALSE");\ + }\ + return buffer_index;\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_BOOLEAN_encode(bbP, dataP);};\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {MIH_C_ENUMERATED_decode(bbP, dataP);}; +#else + #define TYPEDEF_BOOLEAN(DATA_TYPE_NAME) typedef MIH_C_BOOLEAN_T DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP);\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); +#endif + +/*! \def BOOLEAN(VAR_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief A variable declaration of type MIH_C_BOOLEAN_T. + */ +#define BOOLEAN(VAR_NAME) MIH_C_BOOLEAN_T VAR_NAME; + + +//----------------------- OCTET_STRING ---------------------------------------- +#ifdef MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C + /*! \def TYPEDEF_OCTET_STRING(DATA_TYPE_NAME, MAX_LENGTH) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines DATA_TYPE_NAME as a LIST of MAX_LENGTH char elements, and its functions for de/serializing this type. + */ +#define TYPEDEF_OCTET_STRING(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME { u_int16_t length; u_int8_t val[MAX_LENGTH];} DATA_TYPE_NAME ## _T;\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *listP, char* bufP) {\ + memcpy(bufP, listP->val, listP->length);\ + bufP[listP->length] = 0;\ + return listP->length;\ + };\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP) {\ + MIH_C_LIST_LENGTH_decode(bbP, &listP->length);\ + if (listP->length > MAX_LENGTH) {printf("[MIH_C] ERROR DATA_TYPE_NAME ## _decode String length out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ + } else {\ + BitBuffer_readMem(bbP, listP->val, listP->length);\ + }\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP) {\ + if (listP->length > MAX_LENGTH) {\ + printf("[MIH_C] ERROR DATA_TYPE_NAME ## _encode String length out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ + } else {\ + MIH_C_LIST_LENGTH_encode(bbP, listP->length);\ + BitBuffer_writeMem(bbP, listP->val, listP->length);\ + }\ + };\ + void DATA_TYPE_NAME ## _set(DATA_TYPE_NAME ## _T *octet_strP, u_int8_t* strP, u_int16_t lengthP) {\ + if (lengthP > MAX_LENGTH) {\ + printf("[MIH_C] ERROR DATA_TYPE_NAME ## _set String length out of bounds\n");\ + octet_strP->length = 0;\ + } else {\ + octet_strP->length = lengthP;\ + if (strP != NULL) {\ + memcpy((char *)octet_strP->val, (char *)strP, lengthP);\ + } else {\ + memset((char *)octet_strP->val, 0, lengthP);\ + }\ + }\ + }; +#else +#define TYPEDEF_OCTET_STRING(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME { u_int16_t length; u_int8_t val[MAX_LENGTH];} DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *listP, char* bufP);\ + extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP);\ + extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP);\ + extern void DATA_TYPE_NAME ## _set(DATA_TYPE_NAME ## _T *octet_strP, u_int8_t* strP, u_int16_t lengthP); +#endif + + +//----------------------- PERCENTAGE ------------------------------------------ +TYPEDEF_UNSIGNED_INT1(MIH_C_PERCENTAGE); +/*! \var PERCENTAGE(VAR_NAME) + * \ingroup MIH_C_F1_BASIC_DATA_TYPES + * \brief Defines VAR_NAME as MIH_C_PERCENTAGE_T. + */ +#define PERCENTAGE(VAR_NAME) MIH_C_PERCENTAGE_T VAR_NAME; + +//----------------------- STATUS ---------------------------------------------- +TYPEDEF_ENUMERATED(MIH_C_STATUS); +#define MIH_C_STATUS_SUCCESS (MIH_C_STATUS_T)0 +#define MIH_C_STATUS_UNSPECIFIED_FAILURE (MIH_C_STATUS_T)1 +#define MIH_C_STATUS_REJECTED (MIH_C_STATUS_T)2 +#define MIH_C_STATUS_AUTHORIZATION_FAILURE (MIH_C_STATUS_T)3 +#define MIH_C_STATUS_NETWORK_ERROR (MIH_C_STATUS_T)4 + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.3 Data types for addresses +//----------------------------------------------------------------------------- +/*! \var MIH_C_UNSIGNED_INT4_T MIH_C_CELL_ID_T +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief This data type identifies a cell uniquely within 3GPP UTRAN and +* consists of radio network controller (RNC)-ID and C-ID as defined in +* 3GPP TS 25.401. +* Valid Range: 0..268435455. +*/ +TYPEDEF_UNSIGNED_INT4(MIH_C_CELL_ID) +//------------------------------------------- +/*! +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief The BSS and cell within the BSS are identified by Cell Identity (CI). +* See 3GPP TS 23.003. +*/ +TYPEDEF_OCTET(MIH_C_CI, 2) +//------------------------------------------- +/*! +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief The public land mobile network (PLMN) unique identifier. +* PLMN_ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC). +* This is to represent the access network identifier. +* Coding of PLMN_ID is defined in 3GPP TS 25.413. +*/ +TYPEDEF_OCTET(MIH_C_PLMN_ID, 3) +//------------------------------------------- +/*! +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief Location Area Code (LAC) is a fixed length code (of 2 octets) +* identifying a location area within a public landmobile network (PLMN). +* See 3GPP TS 23.003. +*/ +TYPEDEF_OCTET(MIH_C_LAC, 2) +//------------------------------------------- +/*! \struct MIH_C_3GPP_2G_CELL_ID +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief A data type to represent a 3GPP 2G cell identifier. +*/ +typedef struct MIH_C_3GPP_2G_CELL_ID { + MIH_C_PLMN_ID_T plmn_id; + MIH_C_LAC_T lac; + MIH_C_CI_T ci; +} MIH_C_3GPP_2G_CELL_ID_T; + +//------------------------------------------- +/*! \struct MIH_C_3GPP_3G_CELL_ID +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief A data type to represent a 3GPP 3G cell identifier. +*/ +typedef struct MIH_C_3GPP_3G_CELL_ID { + MIH_C_PLMN_ID_T plmn_id; + MIH_C_CELL_ID_T cell_id; +} MIH_C_3GPP_3G_CELL_ID_T; +//------------------------------------------- +/*! \struct MIH_C_3GPP_ADDR +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief A data type to represent a 3GPP transport address. +*/ +TYPEDEF_OCTET_STRING(MIH_C_3GPP_ADDR, MIH_C_3GPP_ADDR_LENGTH) +//------------------------------------------- +/*! \struct MIH_C_3GPP2_ADDR +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief A data type to represent a 3GPP2 transport address. +*/ +TYPEDEF_OCTET_STRING(MIH_C_3GPP2_ADDR, MIH_C_3GPP2_ADDR_LENGTH) +//------------------------------------------- +/*! \var MIH_C_IANA_ADDR_T +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief Is the address family type of a transport address. +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_IANA_ADDR) +//------------------------------------------- +/*! \struct MIH_C_TRANSPORT_ADDR_T +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief A type to represent a transport address. The +* UNSIGNED_INT(2) is the address type defined in +* http://www.iana.org/assignments/address-family-numbers. +*/ +TYPEDEF_OCTET_STRING(MIH_C_TRANSPORT_ADDR_VALUE, 128) +//------------------------------------------- +#ifdef MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC_C +#define TYPEDEF_TRANSPORT_ADDR(DATA_TYPE_NAME) typedef struct DATA_TYPE_NAME {\ + MIH_C_IANA_ADDR_T address_family;\ + MIH_C_TRANSPORT_ADDR_VALUE_T address;\ + } DATA_TYPE_NAME ## _T;\ + unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP) {\ + unsigned int buffer_index = 0;\ + buffer_index += sprintf(&bufP[buffer_index], "IANA = ");\ + buffer_index += MIH_C_IANA_ADDR2String(&dataP->address_family, &bufP[buffer_index]);\ + buffer_index += sprintf(&bufP[buffer_index], "TRANSPORT_ADDR = ");\ + buffer_index += MIH_C_TRANSPORT_ADDR_VALUE2String(&dataP->address, &bufP[buffer_index]);\ + return buffer_index;\ + };\ + void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_IANA_ADDR_decode(bbP, &dataP->address_family);\ + MIH_C_TRANSPORT_ADDR_VALUE_decode(bbP, &dataP->address);\ + };\ + void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ + MIH_C_IANA_ADDR_encode(bbP, &dataP->address_family);\ + MIH_C_TRANSPORT_ADDR_VALUE_encode(bbP, &dataP->address);\ + }; +#else +#define TYPEDEF_TRANSPORT_ADDR(DATA_TYPE_NAME) typedef struct DATA_TYPE_NAME {\ + MIH_C_IANA_ADDR_T address_family;\ + MIH_C_TRANSPORT_ADDR_VALUE_T address;\ + } DATA_TYPE_NAME ## _T;\ + extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP);\ + extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ + extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); +#endif +//------------------------------------------- +/*! \struct MIH_C_IP_ADDR_T +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief Represents an IP address. The Address Type is either 1 (IPv4) or 2 (IPv6). +*/ +//typedef MIH_C_TRANSPORT_ADDR_T MIH_C_IP_ADDR_T; +TYPEDEF_TRANSPORT_ADDR(MIH_C_IP_ADDR) +//------------------------------------------- +/*! \struct MIH_C_MAC_ADDR_T +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief Represents a MAC address. The Address Type contains the one used for a specific link layer. +*/ +//typedef MIH_C_TRANSPORT_ADDR_T MIH_C_MAC_ADDR_T; +TYPEDEF_TRANSPORT_ADDR(MIH_C_MAC_ADDR) +//------------------------------------------- +/*! \struct MIH_C_OTHER_L2_ADDR_T +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief A data type to represent a link-layer address other than the address already defined. +* For example, SSID. +*/ +TYPEDEF_OCTET_STRING(MIH_C_OTHER_L2_ADDR, MIH_C_OTHER_L2_ADDR_LENGTH) +//------------------------------------------- + +typedef enum { + MIH_C_CHOICE_MAC_ADDR = 0, + MIH_C_CHOICE_3GPP_3G_CELL_ID, + MIH_C_CHOICE_3GPP_2G_CELL_ID, + MIH_C_CHOICE_3GPP_ADDR, + MIH_C_CHOICE_3GPP2_ADDR, + MIH_C_CHOICE_OTHER_L2_ADDR + } MIH_C_LINK_ADDR_CHOICE_ENUM_T; +//------------------------------------------- +/*! \struct MIH_C_LINK_ADDR +* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC +* \brief A data type to represent an address of any link layer. +*/ +typedef struct MIH_C_LINK_ADDR { + MIH_C_CHOICE_T choice; + union { + MIH_C_MAC_ADDR_T mac_addr; + MIH_C_3GPP_3G_CELL_ID_T _3gpp_3g_cell_id; + MIH_C_3GPP_2G_CELL_ID_T _3gpp_2g_cell_id; + MIH_C_3GPP_ADDR_T _3gpp_addr; + MIH_C_3GPP2_ADDR_T _3gpp2_addr; + MIH_C_OTHER_L2_ADDR_T other_l2_addr; + } _union; +} MIH_C_LINK_ADDR_T; + + + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.4 Data types for links (MAINLY because of precedence definition) +//----------------------------------------------------------------------------- +/*! +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Represents percentage of battery charge remaining. + +*/ +TYPEDEF_INTEGER1(MIH_C_BATT_LEVEL) +//------------------------------------------- +/*! +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Channel identifier as defined in the specific link technology (e.g., standards +* development organization (SDO)). +* Valid Range: 0..65535 +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_CHANNEL_ID) +//------------------------------------------- +#define MIH_C_CONFIG_STATUS_SUCCESS MIH_C_BOOLEAN_TRUE +#define MIH_C_CONFIG_STATUS_ERROR MIH_C_BOOLEAN_FALSE +/*! \var MIH_C_CONFIG_STATUS_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief The status of link parameter configuration. +* TRUE: Success +* FALSE: Error +*/ +TYPEDEF_BOOLEAN(MIH_C_CONFIG_STATUS) +//------------------------------------------- +/*! \var MIH_C_DEVICE_INFO_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A non-NULL terminated string whose length shall not exceed 253 octets, representing +* information on manufacturer, model number, revision number of the software/firmware +* and serial number in displayable text. +*/ +TYPEDEF_OCTET_STRING(MIH_C_DEVICE_INFO, 253) +//------------------------------------------- +#define MIH_C_BIT_DEVICE_INFO MIH_C_BIT_0_VALUE +#define MIH_C_BIT_BATT_LEVEL MIH_C_BIT_1_VALUE +/*! +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A list of device status request. +* Bitmap Values: +* Bit 0: DEVICE_INFO +* Bit 1: BATT_LEVEL +* Bit 2–15: (Reserved) +*/ +TYPEDEF_BITMAP16(MIH_C_DEV_STATES_REQ) +//------------------------------------------- +/*! \struct MIH_C_DEV_STATE_RSP_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Represents a device status. +*/ +typedef struct MIH_C_DEV_STATE_RSP { + MIH_C_CHOICE_T choice; + union { + MIH_C_DEVICE_INFO_T device_info; + MIH_C_BATT_LEVEL_T batt_level; + } _union; +} MIH_C_DEV_STATE_RSP_T; +//------------------------------------------- +/*! +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Time (in ms) to elapse before an action needs to be taken. A value of 0 indicates +* that the action will be taken immediately. Time elapsed will be calculated from the +* instance the command arrives until the time when the execution of the action is carried out. +* Valid Range: 0..65535 +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_LINK_AC_EX_TIME) +//------------------------------------------- +/*! +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Link action result. +* 0: Success +* 1: Failure +* 2: Refused +* 3: Incapable +*/ +TYPEDEF_ENUMERATED(MIH_C_LINK_AC_RESULT) +#define MIH_C_LINK_AC_RESULT_SUCCESS (MIH_C_LINK_AC_RESULT_T)0 +#define MIH_C_LINK_AC_RESULT_FAILURE (MIH_C_LINK_AC_RESULT_T)1 +#define MIH_C_LINK_AC_RESULT_REFUSED (MIH_C_LINK_AC_RESULT_T)2 +#define MIH_C_LINK_AC_RESULT_INCAPABLE (MIH_C_LINK_AC_RESULT_T)3 +//------------------------------------------- +#define MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN MIH_C_BIT_0_VALUE +#define MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN MIH_C_BIT_1_VALUE +#define MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ MIH_C_BIT_2_VALUE +/*! +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Link action attribute that can be executed along with a valid link action. +* Detail description of each attribute is in Table F.6. +* Bitmap Values: +* Bit 0: LINK_SCAN +* Bit 1: LINK_RES_RETAIN +* Bit 2: DATA_FWD_REQ +* Bit 3–7: (Reserved) +*/ +TYPEDEF_BITMAP8(MIH_C_LINK_AC_ATTR) +//------------------------------------------- +/*! +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief An action for a link. The meaning of each link action is defined in Table F.5. +* 0: NONE +* 1: LINK_DISCONNECT +* 2: LINK_LOW_POWER +* 3: LINK_POWER_DOWN +* 4: LINK_POWER_UP +* 5–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_AC_TYPE) +#define MIH_C_LINK_AC_TYPE_NONE (MIH_C_LINK_AC_TYPE_T)0 +#define MIH_C_LINK_AC_TYPE_LINK_DISCONNECT (MIH_C_LINK_AC_TYPE_T)1 +#define MIH_C_LINK_AC_TYPE_LINK_LOW_POWER (MIH_C_LINK_AC_TYPE_T)2 +#define MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN (MIH_C_LINK_AC_TYPE_T)3 +#define MIH_C_LINK_AC_TYPE_LINK_POWER_UP (MIH_C_LINK_AC_TYPE_T)4 +#ifdef MIH_C_MEDIEVAL_EXTENSIONS +#define MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR (MIH_C_LINK_AC_TYPE_T)5 +#define MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES (MIH_C_LINK_AC_TYPE_T)6 +#define MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES (MIH_C_LINK_AC_TYPE_T)7 +#endif +//------------------------------------------- +/*! +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Represents the link type.a +* Number assignments: +* 0: Reserved +* 1: Wireless - GSM +* 2: Wireless - GPRS +* 3: Wireless - EDGE +* 15: Ethernet +* 18: Wireless - Other +* 19: Wireless - IEEE 802.11 +* 22: Wireless - CDMA2000 +* 23: Wireless - UMTS +* 24: Wireless - cdma2000-HRPD +* 25: Wireless - LTE (MEDIEVAL) +* 27: Wireless - IEEE 802.16 +* 28: Wireless - IEEE 802.20 +* 29: Wireless - IEEE 802.22 +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_TYPE) +#define MIH_C_WIRELESS_GSM (MIH_C_LINK_TYPE_T)1 +#define MIH_C_WIRELESS_GPRS (MIH_C_LINK_TYPE_T)2 +#define MIH_C_WIRELESS_EDGE (MIH_C_LINK_TYPE_T)3 +#define MIH_C_ETHERNET (MIH_C_LINK_TYPE_T)15 +#define MIH_C_WIRELESS_OTHER (MIH_C_LINK_TYPE_T)18 +#define MIH_C_WIRELESS_IEEE802_11 (MIH_C_LINK_TYPE_T)19 +#define MIH_C_WIRELESS_CDMA_2000 (MIH_C_LINK_TYPE_T)22 +//#define MIH_C_WIRELESS_UMTS (MIH_C_LINK_TYPE_T)23 +// Temp - MW modified to test LTE for MEDIEVAL +#define MIH_C_WIRELESS_UMTS (MIH_C_LINK_TYPE_T)25 +#define MIH_C_WIRELESS_CDMA_2000_HRPD (MIH_C_LINK_TYPE_T)24 +#define MIH_C_WIRELESS_LTE (MIH_C_LINK_TYPE_T)25 +#define MIH_C_WIRELESS_IEEE802_16 (MIH_C_LINK_TYPE_T)27 +#define MIH_C_WIRELESS_IEEE802_20 (MIH_C_LINK_TYPE_T)28 +#define MIH_C_WIRELESS_IEEE802_22 (MIH_C_LINK_TYPE_T)29 +//------------------------------------------- +/*! \struct MIH_C_LINK_ID_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief The identifier of a link that is not associated with the peer node. +* The LINK_ADDR contains the address of this link. +*/ +typedef struct MIH_C_LINK_ID { + MIH_C_LINK_TYPE_T link_type; + MIH_C_LINK_ADDR_T link_addr; +} MIH_C_LINK_ID_T; +//------------------------------------------- +#ifdef MIH_C_MEDIEVAL_EXTENSIONS +/*! \var MIH_C_PORT_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief 2 octets defining the port used by the transport protocol +*/ +TYPEDEF_OCTET(MIH_C_PORT, 2) +//------------------------------------------- +/*! \struct MIH_C_IP_TUPLE_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief Tuple consisting on an IP address and the port +*/ +typedef struct MIH_C_IP_TUPLE { + MIH_C_IP_ADDR_T ip_addr; + MIH_C_PORT_T port; +} MIH_C_IP_TUPLE_T; +//------------------------------------------- +/*! \var MIH_C_PROTO_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief The transport protocol used: +* 0: TCP +* 1: UDP +*/ +TYPEDEF_ENUMERATED(MIH_C_PROTO) +#define MIH_C_PROTO_TCP (MIH_C_PROTO_T)0 +#define MIH_C_PROTO_UDP (MIH_C_PROTO_T)1 +//------------------------------------------- +/*! \struct MIH_C_FLOW_ID_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief Five tuple, consisting on the source and destination address +* and ports plus the transport protocol used. +*/ +/*typedef struct MIH_C_FLOW_ID { + MIH_C_IP_TUPLE_T source_addr; + MIH_C_IP_TUPLE_T dest_addr; + MIH_C_PROTO_T transport_protocol; +} MIH_C_FLOW_ID_T;*/ +TYPEDEF_UNSIGNED_INT4(MIH_C_FLOW_ID) +//------------------------------------------- +/*! \struct MIH_C_MARK_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief 6 Bits (IPv4) or 20 Bits (IPv6) mask to be applied to the DSCP +* or Flow Label field of IPv4/v6 header. +*/ +typedef struct MIH_C_MARK { + MIH_C_CHOICE_T choice; + union { + BITMAP6(dscp_mask); + BITMAP20(flow_label_mask); + } _union; +} MIH_C_MARK_T; +//------------------------------------------- +/*! \var MIH_C_MAX_DELAY_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief Maximum delay supported by the flow in ms. +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_MAX_DELAY) +//------------------------------------------- +/*! \var MIH_C_BITRATE_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief A type to represent the maximum data rate in kb/s. +* Valid Range: 0 –– 2^32 – 1 + +*/ +TYPEDEF_UNSIGNED_INT4(MIH_C_BITRATE) +//------------------------------------------- +/*! \var MIH_C_JITTER_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief A type to represent the packet transfer delay jitter in ms. +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_JITTER) +//------------------------------------------- +/*! \var MIH_C_PKT_LOSS_RATE_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief A type to represent the packet loss rate. The loss rate is equal +* to the integer part of the result of multiplying --100 times the +* log10 of the ratio between the number of packets lost and the +* total number of packets transmitted. +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_PKT_LOSS_RATE) +//------------------------------------------- +/*! \var MIH_C_COS_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief COS Class to be used for queuing. +* To be filled for LTE and WLAN +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_COS) +//------------------------------------------- +/*! \var MIH_C_DROP_ELIGIBILITY_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief 0 means the frames are not eligible to discarding. +* 1 means frames are eligible for discarding. +*/ +TYPEDEF_BOOLEAN(MIH_C_DROP_ELIGIBILITY) +//------------------------------------------- +/*! \var MIH_C_MULTICAST_ENABLE_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief Identifies if a flow is multicast. +* 0: is not multicast +* 1: is multicast +*/ +TYPEDEF_BOOLEAN(MIH_C_MULTICAST_ENABLE) +//------------------------------------------- +/*! \var MIH_C_JUMBO_ENABLE_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief Identifies if JUMBO must be activated +* 0: Deactivate Jumbo +* 1: Activate Jumbo +*/ +TYPEDEF_BOOLEAN(MIH_C_JUMBO_ENABLE) +#endif +//------------------------------------------- +/*! \var MIH_C_LINK_DATA_RATE_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent the maximum data rate in kb/s. +* Valid Range: 0 – 232–1 +*/ +TYPEDEF_UNSIGNED_INT4(MIH_C_LINK_DATA_RATE) +//------------------------------------------- +#ifdef MIH_C_MEDIEVAL_EXTENSIONS +/*! \struct MIH_C_QOS_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief The choice of delay and bitrate corresponds to a new flow being +* signalled through the MIH_SAP, the COS parameter is used after being processed by the WP3 AQM. +*/ +typedef struct MIH_C_QOS { + MIH_C_CHOICE_T choice; + union { + struct { + MIH_C_MAX_DELAY_T max_delay; + MIH_C_BITRATE_T bitrate; + MIH_C_JITTER_T jitter; + MIH_C_PKT_LOSS_RATE_T pkt_loss; + } mark_qos; + MIH_C_COS_T cos; + } _union; +} MIH_C_QOS_T; +//------------------------------------------- +/*! \struct MIH_C_RESOURCE_DESC_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief The choice of RESOURCE_DESC is used when the LINK_ACTIVATE_RESOURCES +* or DEACTIVATE action is selected in order to identify and +* configure the flow subject to action +*/ +typedef struct MIH_C_RESOURCE_DESC { + MIH_C_LINK_ID_T link_id; + MIH_C_FLOW_ID_T flow_id; + MIH_C_CHOICE_T choice_link_data_rate; + union { + MIH_C_NULL_T null_attr; + MIH_C_LINK_DATA_RATE_T link_data_rate; + } _union_link_data_rate; + MIH_C_CHOICE_T choice_qos; + union { + MIH_C_NULL_T null_attr; + MIH_C_QOS_T qos; + } _union_qos; + MIH_C_CHOICE_T choice_jumbo_enable; + union { + MIH_C_NULL_T null_attr; + MIH_C_JUMBO_ENABLE_T jumbo_enable; + } _union_jumbo_enable; + MIH_C_CHOICE_T choice_multicast_enable; + union { + MIH_C_NULL_T null_attr; + MIH_C_MULTICAST_ENABLE_T multicast_enable; + } _union_multicast_enable; +} MIH_C_RESOURCE_DESC_T; +//------------------------------------------- +/*! \struct MIH_C_FLOW_ATTRIBUTE_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief The choice of FLOW_ATTRIBUTE is used when the FLOW_ATTR action is +* selected in order to provide the mark and multicast configuration +* to be set up for the flow. +*/ +typedef struct MIH_C_FLOW_ATTRIBUTE { + MIH_C_FLOW_ID_T flow_id; + MIH_C_CHOICE_T choice_multicast_enable; + union { + MIH_C_NULL_T null_attr; + MIH_C_MULTICAST_ENABLE_T multicast_enable; + } _union_multicast_enable; + MIH_C_CHOICE_T choice_mark_qos; + union { + MIH_C_NULL_T null_attr; + struct { + MIH_C_MARK_T mark; + MIH_C_QOS_T qos; + } mark_qos; + } _union_mark_qos; + MIH_C_CHOICE_T choice_mark_drop_eligibility; + union { + MIH_C_NULL_T null_attr; + struct { + MIH_C_MARK_T mark; + MIH_C_DROP_ELIGIBILITY_T drop_eligibility; + } mark_drop_eligibility; + } _union_mark_drop_eligibility; + +} MIH_C_FLOW_ATTRIBUTE_T; +//------------------------------------------- +/*! \struct MIH_C_LINK_AC_PARAM_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief The choice of FLOW_ATTRIBUTE is used when the FLOW_ATTR action is selected +* in order to provide the mark and multicast configuration to be set up for the flow. +* The choice of RESOURCE_DESC is used when LINK_ACTIVATE_RESOURCES or +* LINK_DEACTIVATE_RESOURCES actions are used. +*/ +typedef struct MIH_C_LINK_AC_PARAM { + MIH_C_CHOICE_T choice; + union { + MIH_C_NULL_T null_attr; + MIH_C_FLOW_ATTRIBUTE_T flow_attribute; + MIH_C_RESOURCE_DESC_T resource_desc; + } _union; +} MIH_C_LINK_AC_PARAM_T; +#endif +//------------------------------------------- +/*! \struct MIH_C_LINK_ACTION_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Link action. +*/ +typedef struct MIH_C_LINK_ACTION { + MIH_C_LINK_AC_TYPE_T link_ac_type; + MIH_C_LINK_AC_ATTR_T link_ac_attr; +#ifdef MIH_C_MEDIEVAL_EXTENSIONS + MIH_C_LINK_AC_PARAM_T link_ac_param; /*!< \brief extension of MEDIEVAL PROJECT */ +#endif +} MIH_C_LINK_ACTION_T; +//------------------------------------------- +/*! \struct MIH_C_LINK_ACTION_REQ_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A set of handover action request parameters. The choice of LINK_ADDR is to +* provide PoA address information when the LINK_ACTION contains the attribute for DATA_FWD_REQ. +*/ +typedef struct MIH_C_LINK_ACTION_REQ { + MIH_C_LINK_ID_T link_id; + MIH_C_CHOICE_T choice; + union { + MIH_C_NULL_T null_attr; + MIH_C_LINK_ADDR_T link_addr; + } _union; + + MIH_C_LINK_ACTION_T link_action; + MIH_C_LINK_AC_EX_TIME_T link_action_ex_time; +} MIH_C_LINK_ACTION_REQ_T; +//------------------------------------------- +/*! \struct MIH_C_SIG_STRENGTH_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Represents the signal strength in dBm unit or its relative value in an arbitrary percentage scale. +*/ +typedef struct MIH_C_SIG_STRENGTH { + MIH_C_CHOICE_T choice; + union { + INTEGER1(dbm) + PERCENTAGE(percentage) + } _union; +} MIH_C_SIG_STRENGTH_T; +#define MIH_C_SIG_STRENGTH_CHOICE_DBM (MIH_C_CHOICE_T)0 +#define MIH_C_SIG_STRENGTH_CHOICE_PERCENTAGE (MIH_C_CHOICE_T)1 +//------------------------------------------- +/*! \var MIH_C_NETWORK_ID_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent a network identifier. +* A non-NULL terminated string whose length shall not exceed 253 octets. +*/ +TYPEDEF_OCTET_STRING(MIH_C_NETWORK_ID, 253) +//------------------------------------------- +/*! \struct MIH_C_LINK_SCAN_RSP_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Represents a scan response. The LINK_ADDR contains the PoA link address. +* The PoA belongs to the NETWORK_ID with the given SIG_STRENGTH. +*/ +typedef struct MIH_C_LINK_SCAN_RSP { + MIH_C_LINK_ADDR_T link_addr; + MIH_C_NETWORK_ID_T network_id; + MIH_C_SIG_STRENGTH_T sig_strength; +} MIH_C_LINK_SCAN_RSP_T; +//------------------------------------------- +/*! \var MIH_C_LINK_SCAN_RSP_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_LINK_SCAN_RSP, MIH_C_LINK_SCAN_RSP_LENGTH) +//------------------------------------------- +/*! \struct MIH_C_LINK_ACTION_RSP_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A set of link action returned results. +*/ +typedef struct MIH_C_LINK_ACTION_RSP { + MIH_C_LINK_ID_T link_id; + MIH_C_LINK_AC_RESULT_T link_ac_result; + MIH_C_CHOICE_T choice; + union { + MIH_C_NULL_T null_attr; + LIST(MIH_C_LINK_SCAN_RSP, link_scan_rsp) + } _union; +} MIH_C_LINK_ACTION_RSP_T; +//------------------------------------------- +#define MIH_C_BIT_LINK_EVENT_SUBSCRIBE MIH_C_BIT_1_VALUE +#define MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE MIH_C_BIT_2_VALUE +#define MIH_C_BIT_LINK_GET_PARAMETERS MIH_C_BIT_3_VALUE +#define MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS MIH_C_BIT_4_VALUE +#define MIH_C_BIT_LINK_ACTION MIH_C_BIT_5_VALUE +/*! \var MIH_C_LINK_CMD_LIST_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A list of link commands. +* Bitmap Values: +* Bit 0: Reserved +* Bit 1: Link_Event_Subscribe +* Bit 2: Link_Event_Unsubscribe +* Bit 3: Link_Get_Parameters +* Bit 4: Link_Configure_Thresholds +* Bit 5: Link_Action +* Bit 6-31: (Reserved) +*/ +TYPEDEF_BITMAP32(MIH_C_LINK_CMD_LIST) +//------------------------------------------- +/*! \var MIH_C_TH_ACTION_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief +* 0: Set normal threshold +* 1: Set one-shot threshold +* 2: Cancel threshold +*/ +TYPEDEF_ENUMERATED(MIH_C_TH_ACTION) +#define MIH_C_SET_NORMAL_THRESHOLD (MIH_C_TH_ACTION_T)0 +#define MIH_C_SET_ONE_SHOT_THRESHOLD (MIH_C_TH_ACTION_T)1 +#define MIH_C_CANCEL_THRESHOLD (MIH_C_TH_ACTION_T)2 +//------------------------------------------- +/*! \var MIH_C_THRESHOLD_VAL_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Threshold value. The format of the media-dependent value is defined in the +* respective media specification standard and the equivalent number of bits (i.e., +* first bits) of this data type is used. In case that there are remaining unused bits +* in the data type, these are marked as all-zeros (‘0’). +* Valid Range: 0..65535 +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_THRESHOLD_VAL) + +//------------------------------------------- +/*! \var MIH_C_THRESHOLD_XDIR_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief The direction the threshold is to be crossed. +* 0: ABOVE_THRESHOLD +* 1: BELOW_THRESHOLD +* 2–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_THRESHOLD_XDIR) +#define MIH_C_ABOVE_THRESHOLD (MIH_C_THRESHOLD_XDIR_T)0 +#define MIH_C_BELOW_THRESHOLD (MIH_C_THRESHOLD_XDIR_T)1 +//------------------------------------------- +/*! \struct MIH_C_THRESHOLD_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A link threshold. The threshold is considered crossed when the value of the +* link parameter passes the threshold in the specified direction. +*/ +typedef struct MIH_C_THRESHOLD { + MIH_C_THRESHOLD_VAL_T threshold_val; + MIH_C_THRESHOLD_XDIR_T threshold_xdir; +} MIH_C_THRESHOLD_T; +//------------------------------------------- +/*! \var MIH_C_TIMER_INTERVAL_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief This timer value (ms) is used to set the interval between periodic reports. +* Valid Range: 0..65535 +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_TIMER_INTERVAL) +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_GEN_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent a generic link parameter that is applicable to any link type. +* 0: Data Rate—the parameter value is represented as a DATA_RATE. +* 1: Signal Strength—the parameter value is represented as a SIG_STRENGTH. +* 2: Signal over interference plus noise ratio (SINR)—the parameter value is +* represented as an UNSIGNED_INT(2). +* 3:Throughput (the number of bits successfully received divided by the time it +* took to transmit them over the medium)—the parameter value is represented as +* an UNSIGNED_INT(2). +* 4: Packet Error Rate (representing the ratio between the number of frames received +* in error and the total number of frames transmitted in a link population of interest) +* the parameter value is represented as a PERCENTAGE. +* 5–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_GEN) +#define MIH_C_LINK_PARAM_GEN_DATA_RATE (MIH_C_LINK_PARAM_GEN_T)0 +#define MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH (MIH_C_LINK_PARAM_GEN_T)1 +#define MIH_C_LINK_PARAM_GEN_SINR (MIH_C_LINK_PARAM_GEN_T)2 +#define MIH_C_LINK_PARAM_GEN_THROUGHPUT (MIH_C_LINK_PARAM_GEN_T)3 +#define MIH_C_LINK_PARAM_GEN_PACKET_ERROR_RATE (MIH_C_LINK_PARAM_GEN_T)4 +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_QOS_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent QOS_LIST parameters. +* 0: Maximum number of differentiable classes of service supported. +* 1: Minimum packet transfer delay for all CoS, the minimum delay over a class +* population of interest. +* 2: Average packet transfer delay for all CoS, the arithmetic mean of the delay +* over a class population of interest. (See B.3.4) +* 3: Maximum packet transfer delay for all CoS, the maximum delay over a class +* population of interest. +* 4: Packet transfer delay jitter for all CoS, the standard deviation of the delay +* over a class population of interest. (See B.3.5.) +* 5: Packet loss rate for all CoS, the ratio between the number of frames that are +* transmitted but not received and the total number of frames transmitted over +* a class population of interest. (See B.3.2.) +* 6–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_QOS) +#define MIH_C_LINK_PARAM_QOS_MAX_NUM_DIF_COS_SUPPORTED (MIH_C_LINK_PARAM_QOS_T)0 +#define MIH_C_LINK_PARAM_QOS_MIN_PACKET_TRANSFER_DELAY_ALL_COS (MIH_C_LINK_PARAM_QOS_T)1 +#define MIH_C_LINK_PARAM_QOS_AVG_PACKET_TRANSFER_DELAY_ALL_COS (MIH_C_LINK_PARAM_QOS_T)2 +#define MIH_C_LINK_PARAM_QOS_MAX_PACKET_TRANSFER_DELAY_ALL_COS (MIH_C_LINK_PARAM_QOS_T)3 +#define MIH_C_LINK_PARAM_QOS_STD_DEVIATION_PACKET_TRANSFER_DELAY (MIH_C_LINK_PARAM_QOS_T)4 +#define MIH_C_LINK_PARAM_QOS_PACKET_LOSS_RATE_ALL_COS_FRAME_RATIO (MIH_C_LINK_PARAM_QOS_T)5 +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_GG_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent a link parameter for GSM and GPRS. See 3GPP TS 25.008. +* 0: RxQual +* 1: RsLev +* 2: Mean BEP +* 3: StDev BEP +* 4-255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_GG) +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_EDGE_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent a link parameter for EDGE. +* 0-255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_EDGE) +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_ETH_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent a link parameter for Ethernet. +* 0-255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_ETH) +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_802_11_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent a link parameter for IEEE 802.11. +* 0: RSSI of the beacon channel, as defined in IEEE Std 802.11-2007. +* (This is applicable only for an MN.) +* 1: No QoS resource available. The corresponding LINK_PARAM_VAL is BOOLEAN set to TRUE when +* no QoS resources available. (This applicable when the traffic stream to be transmitted +* is on an access category configured for mandatory admission control and the request for +* bandwidth was denied by the available APs in the access network). +* 2: Multicast packet loss rate. +* 3–255: (Reserved) +* Medieval extensions: +* 3: System Load. Percentage of usage load present at the system. +* 4:Number registered users. +* 5:Number active users. +* 6:Congestion window of users. Ordered list of the CW used by the clients, ordered according to +* highest value of MAC address. +* 7:Transmission rate of users. Ordered list of the transmission rate used by the clients, ordered +* according to highest value of MAC address. +* 8-255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_11) +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_C2K_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent a link parameter for CDMA2000. +* 0: PILOT_STRENGTH +* 1–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_C2K) +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_FDD_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent a link parameter for UMTS. See 3GPP TS 25.215. +* 0: CPICH RSCP +* 1: PCCPCH RSCP +* 2: UTRA carrier RSSI +* 3: GSM carrier RSSI +* 4: CPICH Ec/No +* 5: Transport channel BLER +* 6: user equipment (UE) transmitted power +* 7–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_FDD) +#define MIH_C_LINK_PARAM_FDD_CPICH_RSCP (MIH_C_LINK_PARAM_FDD_T)0 +#define MIH_C_LINK_PARAM_FDD_PCCPCH_RSCP (MIH_C_LINK_PARAM_FDD_T)1 +#define MIH_C_LINK_PARAM_FDD_UTRA_CARRIER_RSSI (MIH_C_LINK_PARAM_FDD_T)2 +#define MIH_C_LINK_PARAM_FDD_GSM_CARRIER_RSSI (MIH_C_LINK_PARAM_FDD_T)3 +#define MIH_C_LINK_PARAM_FDD_CPICH_EC_NO (MIH_C_LINK_PARAM_FDD_T)4 +#define MIH_C_LINK_PARAM_FDD_TRANSPORT_CHANNEL_BLER (MIH_C_LINK_PARAM_FDD_T)5 +#define MIH_C_LINK_PARAM_FDD_UE_TRANMITTED_POWER (MIH_C_LINK_PARAM_FDD_T)6 +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_HRPD_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent a link parameter for CDMA2000 HRPD. +* 0: PILOT_STRENGTH +* 1–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_HRPD) +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_802_16_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent a link parameter for IEEE 802.16. +* 0–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_16) +//------------------------------------------- +/*! \var MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent a link parameter for IEEE 802.20. +* 0–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_20) +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_802_22_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A type to represent a link parameter for IEEE 802.22. +* 0–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_22) +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_LTE_T +* \ingroup MIH_C_MEDIEVAL_EXTENSIONS +* \brief A type to represent a link parameter for LTE. +* +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_LTE) +#define MIH_C_LINK_PARAM_LTE_UE_RSRP 0 +#define MIH_C_LINK_PARAM_LTE_UE_RSRQ 1 +#define MIH_C_LINK_PARAM_LTE_UE_CQI 2 +#define MIH_C_LINK_PARAM_LTE_AVAILABLE_BW 3 +#define MIH_C_LINK_PARAM_LTE_PACKET_DELAY 4 +#define MIH_C_LINK_PARAM_LTE_PACKET_LOSS_RATE 5 +#define MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS 6 +#define MIH_C_LINK_PARAM_LTE_MOBILE_NODE_CAPABILITIES 7 +#define MIH_C_LINK_PARAM_LTE_EMBMS_CAPABILITY 8 +#define MIH_C_LINK_PARAM_LTE_JUMBO_FEASIBILITY 9 +#define MIH_C_LINK_PARAM_LTE_JUMBO_SETUP_STATUS 10 +#define MIH_C_LINK_PARAM_LTE_NUM_ACTIVE_EMBMS_RECEIVERS_PER_FLOW 11 + +//------------------------------------------- +/*! \struct MIH_C_LINK_PARAM_TYPE_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Measurable link parameter for which thresholds are being set. +*/ +#define MIH_C_LINK_PARAM_TYPE_CHOICE_GEN (MIH_C_CHOICE_T)0 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_QOS (MIH_C_CHOICE_T)1 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_GG (MIH_C_CHOICE_T)2 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_EDGE (MIH_C_CHOICE_T)3 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_ETH (MIH_C_CHOICE_T)4 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_11 (MIH_C_CHOICE_T)5 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_C2K (MIH_C_CHOICE_T)6 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_FDD (MIH_C_CHOICE_T)7 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_HRPD (MIH_C_CHOICE_T)8 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_16 (MIH_C_CHOICE_T)9 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_20 (MIH_C_CHOICE_T)10 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_22 (MIH_C_CHOICE_T)11 +#define MIH_C_LINK_PARAM_TYPE_CHOICE_LTE (MIH_C_CHOICE_T)12 + +typedef struct MIH_C_LINK_PARAM_TYPE { + MIH_C_CHOICE_T choice; + union { + MIH_C_LINK_PARAM_GEN_T link_param_gen; + MIH_C_LINK_PARAM_QOS_T link_param_qos; + MIH_C_LINK_PARAM_GG_T link_param_gg; + MIH_C_LINK_PARAM_EDGE_T link_param_edge; + MIH_C_LINK_PARAM_ETH_T link_param_eth; + MIH_C_LINK_PARAM_802_11_T link_param_802_11; + MIH_C_LINK_PARAM_C2K_T link_param_c2k; + MIH_C_LINK_PARAM_FDD_T link_param_fdd; + MIH_C_LINK_PARAM_HRPD_T link_param_hrpd; + MIH_C_LINK_PARAM_802_16_T link_param_802_16; + MIH_C_LINK_PARAM_802_20_T link_param_802_20; + MIH_C_LINK_PARAM_802_22_T link_param_802_22; + MIH_C_LINK_PARAM_LTE_T link_param_lte; + } _union; +} MIH_C_LINK_PARAM_TYPE_T; +//------------------------------------------- +/*! \var MIH_C_THRESHOLD_LIST_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_THRESHOLD, MIH_C_THRESHOLD_LIST_LENGTH) +/*! \struct MIH_C_LINK_CFG_PARAM_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A link configuration parameter. +* TH_ACTION indicates what action to apply to the listed thresholds. +* When “Cancel threshold†is selected and no thresholds are specified, then all +* currently configured thresholds for the given LINK_PARAM_TYPE are cancelled. +* When “Cancel threshold†is selected and thresholds are specified only those +* configured thresholds for the given LINK_PARAM_TYPE and whose threshold value +* match what was specified are cancelled. +* With “Set one-shot threshold†the listed thresholds are first set and then each of +* the threshold is cancelled as soon as it is crossed for the first time. +*/ +typedef struct MIH_C_LINK_CFG_PARAM { + MIH_C_LINK_PARAM_TYPE_T link_param_type; + MIH_C_CHOICE_T choice; + union { + MIH_C_NULL_T null_attr; + MIH_C_TIMER_INTERVAL_T timer_interval; +#ifdef RAL_SAME_AS_MEDIEVAL_PROJECT_BUT_I_THINK_THIS_IS_AN_ERROR + LIST(MIH_C_LINK_SCAN_RSP, link_scan_rsp) +#endif + } _union; + MIH_C_TH_ACTION_T th_action; + LIST(MIH_C_THRESHOLD, threshold) +} MIH_C_LINK_CFG_PARAM_T; +//------------------------------------------- +/*! \struct MIH_C_LINK_CFG_STATUS_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief The status of link parameter configuration for each threshold specified in the THRESHOLD. +*/ +typedef struct MIH_C_LINK_CFG_STATUS { + MIH_C_LINK_PARAM_TYPE_T link_param_type; + MIH_C_THRESHOLD_T threshold; + MIH_C_CONFIG_STATUS_T config_status; +} MIH_C_LINK_CFG_STATUS_T; +//------------------------------------------- +#define MIH_C_BIT_NUMBER_OF_CLASSES_OF_SERVICE_SUPPORTED MIH_C_BIT_0_VALUE +#define MIH_C_BIT_NUMBER_OF_QUEUES_SUPPORTED MIH_C_BIT_1_VALUE +/*! \var MIH_C_LINK_DESC_REQ_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A set of link descriptors. +* Bitmap Values: +* Bit 0: Number of Classes of Service Supported +* Bit 1: Number of Queues Supported +* Bits 2–15: (Reserved) +*/ +TYPEDEF_BITMAP16(MIH_C_LINK_DESC_REQ) +//------------------------------------------- +/*! \var MIH_C_NUM_COS_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief The maximum number of differentiable classes of service supported. +* Valid Range: 0..255 +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_NUM_COS) +//------------------------------------------- +/*! \var MIH_C_NUM_QUEUE_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief The number of transmit queues supported. +* Valid Range: 0..255 +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_NUM_QUEUE) +//------------------------------------------- +/*! \struct MIH_C_LINK_DESC_RSP_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Descriptors of a link. +*/ +typedef struct MIH_C_LINK_DESC_RSP { + MIH_C_CHOICE_T choice; + union { + MIH_C_NUM_COS_T num_cos; + MIH_C_NUM_QUEUE_T num_queue; + } _union; +} MIH_C_LINK_DESC_RSP_T; +//------------------------------------------- +/*! \var MIH_C_LINK_DN_REASON_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Represents the reason of a link down event. +* See Table F.7 for the enumeration values. +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_DN_REASON) +//------------------------------------------- +#define MIH_C_BIT_LINK_DETECTED MIH_C_BIT_0_VALUE +#define MIH_C_BIT_LINK_UP MIH_C_BIT_1_VALUE +#define MIH_C_BIT_LINK_DOWN MIH_C_BIT_2_VALUE +#define MIH_C_BIT_LINK_PARAMETERS_REPORT MIH_C_BIT_3_VALUE +#define MIH_C_BIT_LINK_GOING_DOWN MIH_C_BIT_4_VALUE +#define MIH_C_BIT_LINK_HANDOVER_IMMINENT MIH_C_BIT_5_VALUE +#define MIH_C_BIT_LINK_HANDOVER_COMPLETE MIH_C_BIT_6_VALUE +#define MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS MIH_C_BIT_7_VALUE +/*! \var MIH_C_LINK_EVENT_LIST_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A list of link events. The specified event is selected if the corresponding bit is set to 1. +* Bitmap values: +* Bit 0: Link_Detected +* Bit 1: Link_Up +* Bit 2: Link_Down +* Bit 3: Link_Parameters_Report +* Bit 4: Link_Going_Down +* Bit 5: Link_Handover_Imminent +* Bit 6: Link_Handover_Complete +* Bit 7: Link_PDU_Transmit_Status +* Bit 8–31: (Reserved) +*/ +TYPEDEF_BITMAP32(MIH_C_LINK_EVENT_LIST) +//------------------------------------------- +/*! \var MIH_C_LINK_GD_REASON_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Represents the reason of a link going down. See Table F.8 for the enumeration values. +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_GD_REASON) +//------------------------------------------- +#define MIH_C_BIT_EVENT_SERVICE_SUPPORTED MIH_C_BIT_1_VALUE +#define MIH_C_BIT_COMMAND_SERVICE_SUPPORTED MIH_C_BIT_2_VALUE +#define MIH_C_BIT_INFORMATION_SERVICE_SUPPORTED MIH_C_BIT_3_VALUE +/*! \var MIH_C_LINK_MIHCAP_FLAG_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Represents if MIH capability is supported or not. If the bit is set, it indicates +* that the capability is supported. +* Bitmap values: +* Bit 1: event service (ES) supported +* Bit 2: command service (CS) supported +* Bit 3: information service (IS) supported +* Bit 0, 4–7: (Reserved) +*/ +TYPEDEF_BITMAP8(MIH_C_LINK_MIHCAP_FLAG) +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_VAL_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief The current value of the parameter. The format of the media-dependent value is defined in +* the respective media specification standard and the equivalent number of bits (i.e., first +* bits) of this data type is used. In case that there are remaining unused bits in the data +* type, these are marked as all-zeros (‘0’). +* Valid Range: 0..65535 +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_LINK_PARAM_VAL) + + + + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.9 Data types for QOS (MAINLY because of precedence definition) +//----------------------------------------------------------------------------- +//------------------------------------------- +/*! \var MIH_C_COS_ID_T +* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS +* \brief Defines MIH_C_COS_ID_T as a MIH_C_UNSIGNED_INT1_T. +* Valid Range: 0–255 +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_COS_ID) +//------------------------------------------- +/*! \struct MIH_C_MIN_PK_TX_DELAY_T +* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS +* \brief A type to represent the minimum packet transfer delay in ms for the specific CoS specified by the COS_ID. +*/ +typedef struct MIH_C_MIN_PK_TX_DELAY { + MIH_C_COS_ID_T cos_id; + UNSIGNED_INT2(value) +} MIH_C_MIN_PK_TX_DELAY_T; +//------------------------------------------- +/*! \struct MIH_C_AVG_PK_TX_DELAY_T +* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS +* \brief A type to represent the average packet transfer delay in ms for the specific CoS specified by the COS_ID. +*/ +typedef struct MIH_C_AVG_PK_TX_DELAY { + MIH_C_COS_ID_T cos_id; + UNSIGNED_INT2(value) +} MIH_C_AVG_PK_TX_DELAY_T; +//------------------------------------------- +/*! \struct MIH_C_MAX_PK_TX_DELAY_T +* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS +* \brief A type to represent the maximum packet transfer delay in ms for the specific CoS specified by the COS_ID. +*/ +typedef struct MIH_C_MAX_PK_TX_DELAY { + MIH_C_COS_ID_T cos_id; + UNSIGNED_INT2(value) +} MIH_C_MAX_PK_TX_DELAY_T; +//------------------------------------------- +/*! \struct MIH_C_PK_DELAY_JITTER_T +* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS +* \brief A type to represent the packet transfer delay jitter in ms for the specific CoS specified by the COS_ID. +*/ +typedef struct MIH_C_PK_DELAY_JITTER { + MIH_C_COS_ID_T cos_id; + UNSIGNED_INT2(value) +} MIH_C_PK_DELAY_JITTER_T; +//------------------------------------------- +/*! \struct MIH_C_PK_LOSS_RATE_T +* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS +* \brief A type to represent the packet loss rate for the specific CoS specified by the COS_ID. The loss rate is +* equal to the integer part of the result of multiplying –100 times the log10 of the ratio between the num- +* ber of packets lost and the total number of packets transmitted in the class population of interest. +*/ +typedef struct MIH_C_PK_LOSS_RATE { + MIH_C_COS_ID_T cos_id; + UNSIGNED_INT2(value) +} MIH_C_PK_LOSS_RATE_T; +//------------------------------------------- +/*! \var MIH_C_MIN_PK_TX_DELAY_LIST_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_MIN_PK_TX_DELAY, MIH_C_QOS_LIST_LENGTH) +/*! \var MIH_C_AVG_PK_TX_DELAY_LIST_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_AVG_PK_TX_DELAY, MIH_C_QOS_LIST_LENGTH) +/*! \var MIH_C_MAX_PK_TX_DELAY_LIST_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_MAX_PK_TX_DELAY, MIH_C_QOS_LIST_LENGTH) +/*! \var MIH_C_PK_DELAY_JITTER_LIST_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_PK_DELAY_JITTER, MIH_C_QOS_LIST_LENGTH) +/*! \var MIH_C_PK_LOSS_RATE_LIST_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_PK_LOSS_RATE, MIH_C_QOS_LIST_LENGTH) + +//------------------------------------------- +/*! \var MIH_C_NUM_COS_TYPES_T +* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS +* \brief +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_NUM_COS_TYPES) + +/*! \struct MIH_C_QOS_PARAM_VAL_T +* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS +* \brief A choice of Class of Service (CoS) parameters. +*/ +typedef struct MIH_C_QOS_PARAM_VAL { + MIH_C_CHOICE_T choice; + union { + MIH_C_NUM_COS_TYPES_T num_qos_types; + LIST(MIH_C_MIN_PK_TX_DELAY, min_pk_tx_delay) + LIST(MIH_C_AVG_PK_TX_DELAY, avg_pk_tx_delay) + LIST(MIH_C_MAX_PK_TX_DELAY, max_pk_tx_delay) + LIST(MIH_C_PK_DELAY_JITTER, pk_delay_jitter) + LIST(MIH_C_PK_LOSS_RATE, pk_loss_rate) + } _union; +} MIH_C_QOS_PARAM_VAL_T; +#define MIH_C_QOS_PARAM_VAL_CHOICE_NUM_QOS_TYPES (MIH_C_CHOICE_T)0 +#define MIH_C_QOS_PARAM_VAL_CHOICE_MIN_PK_TX_DELAY (MIH_C_CHOICE_T)1 +#define MIH_C_QOS_PARAM_VAL_CHOICE_AVG_PK_TX_DELAY (MIH_C_CHOICE_T)2 +#define MIH_C_QOS_PARAM_VAL_CHOICE_MAX_PK_TX_DELAY (MIH_C_CHOICE_T)3 +#define MIH_C_QOS_PARAM_VAL_CHOICE_PK_DELAY_JITTER (MIH_C_CHOICE_T)4 +#define MIH_C_QOS_PARAM_VAL_CHOICE_PK_LOSS_RATE (MIH_C_CHOICE_T)5 + +//------------------------------------------- +/*! \struct MIH_C_QOS_LIST_T +* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS +* \brief A list of Class of Service (CoS) parameters. +*/ +typedef struct MIH_C_QOS_LIST { + MIH_C_NUM_COS_TYPES_T num_qos_types; + LIST(MIH_C_MIN_PK_TX_DELAY, min_pk_tx_delay) + LIST(MIH_C_AVG_PK_TX_DELAY, avg_pk_tx_delay) + LIST(MIH_C_MAX_PK_TX_DELAY, max_pk_tx_delay) + LIST(MIH_C_PK_DELAY_JITTER, pk_delay_jitter) + LIST(MIH_C_PK_LOSS_RATE, pk_loss_rate) +} MIH_C_QOS_LIST_T; + + + +//------------------------------------------- +/*! \struct MIH_C_LINK_PARAM_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Represents a link parameter type and value pair. +*/ +typedef struct MIH_C_LINK_PARAM { + MIH_C_LINK_PARAM_TYPE_T link_param_type; + MIH_C_CHOICE_T choice; + union { + MIH_C_LINK_PARAM_VAL_T link_param_val; + MIH_C_QOS_PARAM_VAL_T qos_param_val; + } _union; +} MIH_C_LINK_PARAM_T; +#define MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL (MIH_C_CHOICE_T)0 +#define MIH_C_LINK_PARAM_CHOICE_QOS_PARAM_VAL (MIH_C_CHOICE_T)1 +//------------------------------------------- +/*! \struct MIH_C_LINK_PARAM_RPT_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Represents a link parameter report. +* Includes an option of the THRESHOLD that was crossed. +* If no THRESHOLD is included, then this is a periodic report. +*/ +typedef struct MIH_C_LINK_PARAM_RPT { + MIH_C_LINK_PARAM_T link_param; + MIH_C_CHOICE_T choice; + union { + MIH_C_NULL_T null_attr; + MIH_C_THRESHOLD_T threshold; + } _union; +} MIH_C_LINK_PARAM_RPT_T; +#define MIH_C_LINK_PARAM_RPT_CHOICE_NULL 0 +#define MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD 1 +//------------------------------------------- +/*! \var MIH_C_LINK_ADDR_LIST_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_LINK_ADDR, MIH_C_LINK_ADDR_LIST_LENGTH) +/*! \struct MIH_C_LINK_POA_LIST_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A list of PoAs for a particular link. The LIST(LINK_ADDR) is a list of PoA +* link addresses and is sorted from most preferred first to least preferred last. +*/ +typedef struct MIH_C_LINK_POA_LIST { + MIH_C_LINK_ID_T link_id; + LIST(MIH_C_LINK_ADDR, link_addr) +} MIH_C_LINK_POA_LIST_T; +//------------------------------------------- +#define MIH_C_LINK_RES_STATUS_AVAILABLE MIH_C_MIH_C_BOOLEAN_TRUE +#define MIH_C_LINK_RES_STATUS_NOT_AVAILABLE MIH_C_BOOLEAN_FALSE +/*! \var MIH_C_LINK_RES_STATUS_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Indicates if a resource is available or not. +* TRUE: Available +* FALSE: Not available. +*/ +TYPEDEF_BOOLEAN(MIH_C_LINK_RES_STATUS) +//------------------------------------------- +#define MIH_C_BIT_LINK_STATES_REQ_OP_MODE MIH_C_BIT_0_VALUE +#define MIH_C_BIT_LINK_STATES_REQ_CHANNEL_ID MIH_C_BIT_1_VALUE +/*! \var MIH_C_LINK_STATES_REQ_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Link states to be requested. +* Bit 0: OP_MODE +* Bit 1: CHANNEL_ID +* Bit 2–15: (Reserved) +*/ +TYPEDEF_BITMAP16(MIH_C_LINK_STATES_REQ) +//------------------------------------------- +#define MIH_C_OPMODE_NORMAL_MODE 0 +#define MIH_C_OPMODE_POWER_SAVING_MODE 1 +#define MIH_C_OPMODE_POWERED_DOWN 2 +/*! \var MIH_C_OPMODE_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief The link power mode. +* 0: Normal Mode +* 1: Power Saving Mode +* 2: Powered Down +* 3–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_OPMODE) +//------------------------------------------- +/*! \struct MIH_C_LINK_STATES_RSP_T +* \brief The operation mode or the channel ID of the link. +*/ +typedef struct MIH_C_LINK_STATES_RSP { + MIH_C_CHOICE_T choice; + union { + MIH_C_OPMODE_T op_mode; + MIH_C_CHANNEL_ID_T channel_id; + } _union; +} MIH_C_LINK_STATES_RSP_T; +//------------------------------------------- +/*! \var MIH_C_LINK_PARAM_TYPE_LIST_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_LINK_PARAM_TYPE, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) +/*! \struct MIH_C_LINK_STATUS_REQ_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief Represents the possible information to request from a link. +*/ +typedef struct MIH_C_LINK_STATUS_REQ { + MIH_C_LINK_STATES_REQ_T link_states_req; + LIST(MIH_C_LINK_PARAM_TYPE, link_param_type) + MIH_C_LINK_DESC_RSP_T link_desc_rsp; +} MIH_C_LINK_STATUS_REQ_T; +//------------------------------------------- +/*! \var MIH_C_LINK_STATES_RSP_LIST_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_LINK_STATES_RSP, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) +/*! \var MIH_C_LINK_PARAM_LIST_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_LINK_PARAM, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) +/*! \var MIH_C_LINK_DESC_RSP_LIST_T +* \brief +*/ +TYPEDEF_LIST(MIH_C_LINK_DESC_RSP, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) +/*! \struct MIH_C_LINK_STATUS_RSP_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief A set of link status parameter values correspond to the LINK_STATUS_REQ. +*/ +typedef struct MIH_C_LINK_STATUS_RSP { + LIST(MIH_C_LINK_STATES_RSP, link_states_rsp) + LIST(MIH_C_LINK_PARAM, link_param) + LIST(MIH_C_LINK_DESC_RSP, link_desc_rsp) +} MIH_C_LINK_STATUS_RSP_T; +//------------------------------------------- +/*! \struct MIH_C_LINK_TUPLE_ID_T +* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC +* \brief The identifier of a link that is associated with a PoA. The LINK_ID contains the MN LINK_ADDR. +* The optional LINK_ADDR contains a link address of PoA. +*/ +typedef struct MIH_C_LINK_TUPLE_ID { + MIH_C_LINK_ID_T link_id; + MIH_C_CHOICE_T choice; + union { + MIH_C_NULL_T null_attr; + MIH_C_LINK_ADDR_T link_addr; + } _union; +} MIH_C_LINK_TUPLE_ID_T; +#define MIH_C_LINK_TUPLE_ID_CHOICE_NULL 0 +#define MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR 1 +//------------------------------------------- + + + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.5 Link actions +//----------------------------------------------------------------------------- +#define MIH_C_LINK_ACTION_LINK_NONE 0 +#define MIH_C_LINK_ACTION_LINK_LINK_DISCONNECT 1 /* Disconnect the link connection directly.*/ +#define MIH_C_LINK_ACTION_LINK_LOW_POWER 2 /* Cause the link to adjust its battery power level to be low power consumption. */ +#define MIH_C_LINK_ACTION_LINK_POWER_DOWN 3 /* Cause the link to power down and turn off the radio.*/ +#define MIH_C_LINK_ACTION_LINK_POWER_UP 4 /* Cause the link to power up and establish L2 connectivity. For UMTS link type, power up lower layers and establish PDP context. */ + + + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.6 Link action attibutes +//----------------------------------------------------------------------------- +#define MIH_C_LINK_ACTION_ATTRIBUTE_DATA_FWD_REQ 0 /* This indication requires the buffered data at the old serving PoA entity to be forwarded + * to the new target PoA entity in order to avoid data loss. This action can be taken imme- + * diately after the old serving PoS receives MIH_N2N_HO_Commit response message from the new + * target PoS, or the old serving PoS receives MIH_Net_HO_Commit response message from the MN. + * This is not valid on UMTS link type.*/ +#define MIH_C_LINK_ACTION_ATTRIBUTE_LINK_RES_RETAIN 1 /* The link will be disconnected but the resource for the link connection still remains so + * reestablishing the link connection later can be more efficient.*/ +#define MIH_C_LINK_ACTION_ATTRIBUTE_LINK_SCAN 2 /* Cause the link to perform a scan.*/ + + + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.7 Link down reason code +//----------------------------------------------------------------------------- +#define MIH_C_LINK_DOWN_REASON_EXPLICIT_DISCONNECT 0 /* The link is down because of explicit disconnect procedures initiated either by MN or network.*/ +#define MIH_C_LINK_DOWN_REASON_PACKET_TIMEOUT 1 /* The link is down because no acknowledgements were received for transmitted packets within the + * specified time limit.*/ +#define MIH_C_LINK_DOWN_REASON_NO_RESOURCE 2 /* The link is down because there were no resources to maintain the connection.*/ +#define MIH_C_LINK_DOWN_REASON_NO_BROADCAST 3 /* The link is down because broadcast messages (such as beacons in IEEE 802.11 management frames) + * could not be received by MN. */ +#define MIH_C_LINK_DOWN_REASON_AUTHENTICATION_FAILURE 4 /* Authentication failure.*/ +#define MIH_C_LINK_DOWN_REASON_BILLING_FAILURE 5 /* Billing failure.*/ + + + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.8 Link going down reason code +//----------------------------------------------------------------------------- +#define MIH_C_LINK_GOING_DOWN_REASON_EXPLICIT_DISCONNECT 0 /* The link is going to be down because explicit disconnect procedures will be + * initiated either by MN or network. For example, when a BS has decided to + * shutdown for administrative reasons or an operator of the terminal has + * decided to execute a handover manually, a Link_Going_Down trigger is sent + * to the MIHF. + */ +#define MIH_C_LINK_GOING_DOWN_REASON_LINK_PARAMETER_DEGRADING 1 /* The link is going to be down because broadcast messages (such as beacons in + * IEEE 802.11 management frames) could not be received by MN. + */ +#define MIH_C_LINK_GOING_DOWN_REASON_LOW_POWER 2 /* The link is going to be down because the power level of the terminal is low + * and the current link will not be maintained in such a low power level. Mobile + * terminals usually have limited battery supply, and when the battery level of + * the terminal is low, a terminal can choose a link that has lower power con- + * sumption for handover according to the received Link_Going_Down triggers + * with this reason code. This will lengthen the usable time for the terminal. + */ +#define MIH_C_LINK_GOING_DOWN_REASON_NO_RESOURCE 3 /* The link is going to be down because there will be no resources to maintain + * the current connection. For example, a BS that has too many users can send + * Link_Going_Down indications to terminals when the links with them can not + * be kept because of insufficient resources. Another example is that users with + * higher priority can preempt the ones with lower priority when no more + * resources can be allocated in 3GPP, and this can also cause a + * Link_Going_Down indication with this reason code. + */ + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.10 Not implemented +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.11 Not implemented +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.12 Data types for IP configuration +//----------------------------------------------------------------------------- +#define MIH_C_BIT_IP_CFG_MTHDS_IPV4_STATIC_CONFIGURATION MIH_C_BIT_0_VALUE +#define MIH_C_BIT_IP_CFG_MTHDS_IPV4_DYNAMIC_CONFIGURATION MIH_C_BIT_1_VALUE +#define MIH_C_BIT_IP_CFG_MTHDS_MOBILE_IPV4_WITH_FA_COA MIH_C_BIT_2_VALUE +#define MIH_C_BIT_IP_CFG_MTHDS_MOBILE_IPV4_WITHOUT_FA MIH_C_BIT_3_VALUE +#define MIH_C_BIT_IP_CFG_MTHDS_IPV6_STATELESS_ADDRESS_CONFIGURATION MIH_C_BIT_11_VALUE +#define MIH_C_BIT_IP_CFG_MTHDS_IPV6_STATEFULL_ADDRESS_CONFIGURATION MIH_C_BIT_12_VALUE +#define MIH_C_BIT_IP_CFG_MTHDS_IPV6_MANUAL_ADDRESS_CONFIGURATION MIH_C_BIT_13_VALUE +/*! \var MIH_C_IP_CFG_MTHDS_T +* \brief A set of IP configuration methods. +* Bit 0: IPv4 static configuration +* Bit 1: IPv4 dynamic configuration (DHCPv4) +* Bit 2: Mobile IPv4 with foreign agent (FA) care-of address (CoA) (FA-CoA) +* Bit 3: Mobile IPv4 without FA (Co-located CoA) +* Bits 4–10: reserved for IPv4 address configurations +* Bit 11: IPv6 stateless address configuration +* Bit 12: IPv6 stateful address configuration (DHCPv6) +* Bit 13: IPv6 manual configuration +* Bits 14–31: (Reserved) +*/ +TYPEDEF_BITMAP32(MIH_C_IP_CFG_MTHDS) +//------------------------------------------- +#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV4 MIH_C_BIT_0_VALUE +#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV4_REGIONAL_REGISTRATION MIH_C_BIT_1_VALUE +#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV6 MIH_C_BIT_2_VALUE +#define MIH_C_BIT_IP_MOB_MGMT_HIERARCHICAL_MOBILE_IPV6 MIH_C_BIT_3_VALUE +#define MIH_C_BIT_IP_MOB_MGMT_LOW_LATENCY_HANDOFFS MIH_C_BIT_4_VALUE +#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV6_FAST_HANDOVERS MIH_C_BIT_5_VALUE +#define MIH_C_BIT_IP_MOB_MGMT_IKEV2_MOBILITY_AND_MULTIHOMING_PROTOCOL MIH_C_BIT_6_VALUE +/*! \var MIH_C_IP_MOB_MGMT_T +* \brief Indicates the supported mobility management protocols. +* Bit 0: Mobile IPv4 (IETF RFC 3344) +* Bit 1: Mobile IPv4 Regional Registration (IETF RFC 4857) +* Bit 2: Mobile IPv6 (IETF RFC 3775) +* Bit 3: Hierarchical Mobile IPv6 (IETF RFC 4140) +* Bit 4: Low Latency Handoffs (IETF RFC 4881) +* Bit 5: Mobile IPv6 Fast Handovers (IETF RFC 5268) +* Bit 6: IKEv2 Mobility and Multihoming Protocol (IETF RFC 4555) +* Bit 7–15: (Reserved) +*/ +TYPEDEF_BITMAP16(MIH_C_IP_MOB_MGMT) +//------------------------------------------- +/*! \var MIH_C_IP_PREFIX_LEN_T +* \brief The length of an IP subnet prefix. +* Valid Range: +* 0..32 for IPv4 subnet. +* 0..64, 65..127 for IPv6 subnet. (IETF RFC 4291 [B25]) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_IP_PREFIX_LEN) +//------------------------------------------- +/*! \var MIH_C_IP_RENEWAL_FLAG_T +* \brief Indicates whether MN’s IP address needs to be changed or not. +* TRUE: Change required. +* FALSE: Change not required. +*/ +TYPEDEF_BOOLEAN(MIH_C_IP_RENEWAL_FLAG) +//------------------------------------------- +/*! \struct MIH_C_IP_SUBNET_INFO_T +* \brief Represent an IP subnet. The IP_PREFIX_LEN contains the bit +* length of the prefix of the subnet to which the IP_ADDR +* belongs. +*/ +typedef struct MIH_C_IP_SUBNET_INFO { + MIH_C_IP_PREFIX_LEN_T ip_prefix_len; + MIH_C_IP_ADDR_T ip_addr; +} MIH_C_IP_SUBNET_INFO_T; + + + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.13 Data types for information elements +//----------------------------------------------------------------------------- +/*! \var MIH_C_NET_AUX_ID_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent an auxiliary access network +* identifier. This is HESSID if network type is +* IEEE 802.11. +*/ +TYPEDEF_OCTET_STRING(MIH_C_NET_AUX_ID, 253) + +// already defined in other section TYPEDEF_OCTET_STRING(MIH_C_NETWORK_ID, 253) +/*! \var MIH_C_BAND_CLASS_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief CDMA band class. +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_BAND_CLASS) +/*! \var MIH_C_BANDWIDTH_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief Channel bandwidth in kb/s. +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_BANDWIDTH) +/*! \var MIH_C_BASE_ID_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief Base station identifier. +*/ +TYPEDEF_UNSIGNED_INT2(MIH_C_BASE_ID) +/*! \var MIH_C_DOWN_BP_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A List of FEC Code Type for Downlink burst. +* Refer to 11.4.1 in IEEE 802.16Rev2/D5.0. +*/ +TYPEDEF_BITMAP256(MIH_C_DOWN_BP) +/*! \var MIH_C_TYPE_EXT_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A generic type extension contained indicating a flexible length and format field. The content is to be +* defined and filled by the appropriate SDO or service provider consortium, etc. +* The value is a non-NULL terminated string whose length shall not exceed 253 octets. +*/ +TYPEDEF_OCTET_STRING(MIH_C_TYPE_EXT, 253) +/*! \var MIH_C_UP_BP_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A List of FEC Code Type for Uplink burst. +* Refer to 11.3.1 in IEEE 802.16Rev2/D5.0 +*/ +TYPEDEF_BITMAP256(MIH_C_UP_BP) +//------------------------------------------- +/*! \struct MIH_C_BURST_PROF_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief Burst profile. +*/ +typedef struct MIH_C_BURST_PROF { + MIH_C_DOWN_BP_T down_bp; + MIH_C_UP_BP_T up_bp; +} MIH_C_BURST_PROF_T; +//------------------------------------------- +/*! \struct MIH_C_CH_RANGE_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type that contains two numbers. The first unsigned +* integer is the low range. The second unsigned integer +* is the high range. Both values are in kHz. +* The first unsigned integer value should always be less +* than or equal to the second unsigned integer. +*/ +typedef struct MIH_C_CH_RANGE { + UNSIGNED_INT4(low_range); + UNSIGNED_INT4(high_range); +} MIH_C_CH_RANGE_T; +//------------------------------------------- +#define MIH_C_COST_UNIT_SECOND 0 +#define MIH_C_COST_UNIT_MINUTE 1 +#define MIH_C_COST_UNIT_HOURS 2 +#define MIH_C_COST_UNIT_DAY 3 +#define MIH_C_COST_UNIT_WEEK 4 +#define MIH_C_COST_UNIT_MONTH 5 +#define MIH_C_COST_UNIT_YEAR 6 +#define MIH_C_COST_UNIT_FREE 7 +#define MIH_C_COST_UNIT_FLAT_RATE 8 +/*! \var MIH_C_COST_UNIT_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent the unit of a cost. +* 0: second +* 1: minute +* 2: hours +* 3: day +* 4: week +* 5: month +* 6: year +* 7: free +* 8: flat rate +* 9–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_COST_UNIT) +//------------------------------------------- +/*! \struct MIH_C_COST_VALUE_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent the value of a cost. +* The first 4-octet contains the integer part of the cost. +* The last 2-octet contains the fraction part where it rep- +* resents a 3-digit fraction. +* Therefore, the value range of the fraction part is +* [0,999]. +* For example, for a value of ““0.5”â€, the integer part is +* zero and the fraction part is 500. +*/ +typedef struct MIH_C_COST_VALUE { + UNSIGNED_INT4(cost_integer_part); + UNSIGNED_INT2(cost_fraction_part); +} MIH_C_COST_VALUE_T; +//------------------------------------------- +/*! \var MIH_C_COST_CURR_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent the currency of a cost. +* A three-letter currency code (e.g., “USDâ€) specified +* by ISO 4217. +*/ +TYPEDEF_OCTET_STRING(MIH_C_COST_CURR, 3) +//------------------------------------------- +/*! \struct MIH_C_COST_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent a cost. +*/ +typedef struct MIH_C_COST { + MIH_C_COST_UNIT_T cost_unit; + MIH_C_COST_VALUE_T cost_value; + MIH_C_COST_CURR_T cost_curr; +} MIH_C_COST_T; +//------------------------------------------- +/*! \var MIH_C_CNTRY_CODE_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief Country code, represented as two letter ISO 3166-1 country code in capital ASCII letters. +*/ +TYPEDEF_OCTET(MIH_C_CNTRY_CODE, 2) +//------------------------------------------- +/*! \var MIH_C_DATA_RATE_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief +*/ +TYPEDEF_UNSIGNED_INT4(MIH_C_DATA_RATE) +//------------------------------------------- +/*! \var MIH_C_DU_CTR_FREQ_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief Downlink/Uplink center frequency in kHz. +*/ +TYPEDEF_INTEGER8(MIH_C_DU_CTR_FREQ) +//------------------------------------------- +/*! \var MIH_C_EIRP_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief BS’s effective isotropic radiated power level. Signed in units of 1 dBm. +*/ +TYPEDEF_INTEGER4(MIH_C_EIRP) +//------------------------------------------- +/*! \struct MIH_C_GAP_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief This gap is an integer number of physical slot durations and starts on a +* physical slot boundary. Used on TDD systems only. +* The UNSIGNED_INT(2) is used for the TTG - transmit/receive transition gap. +* The UNSIGNED_INT(1) is used for the RTG - receive/transmit transition gap. +*/ +typedef struct MIH_C_GAP + { + UNSIGNED_INT2(ttg); + UNSIGNED_INT1(rtg); +} MIH_C_GAP_T; +//------------------------------------------- +/*! \var MIH_C_HO_CODE_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief HANDOVER_RANGING_CODE. +* Refer to 11.3.1 in IEEE 802.16Rev2/D5.0. +*/ +TYPEDEF_INTEGER1(MIH_C_HO_CODE) +//------------------------------------------- +/*! \var MIH_C_INIT_CODE_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief INITIAL_RANGING_CODE. +* Refer to 11.3.1 in IEEE 802.16Rev2/D5.0. +*/ +TYPEDEF_INTEGER1(MIH_C_INIT_CODE) +//------------------------------------------- +/*! \struct MIH_C_CDMA_CODES_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A set of CDMA ranging codes. +*/ +typedef struct MIH_C_CDMA_CODES { + MIH_C_INIT_CODE_T init_code; + MIH_C_HO_CODE_T ho_code; +} MIH_C_CDMA_CODES_T; +//------------------------------------------- +/*! \struct MIH_C_DCD_UCD_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent the downlink channel descriptor and the uplink channel descriptor. +*/ +typedef struct MIH_C_DCD_UCD { + MIH_C_BASE_ID_T base_id; + MIH_C_BANDWIDTH_T bandwidth; + MIH_C_DU_CTR_FREQ_T du_ctr_freq; + MIH_C_EIRP_T eirp; + MIH_C_GAP_T gap; + MIH_C_BURST_PROF_T burst_prof; + MIH_C_CDMA_CODES_T cdma_codes; +} MIH_C_DCD_UCD_T; +//------------------------------------------- +/*! \var MIH_C_FQDN_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief The fully qualified domain name of a host as described in IETF RFC 2181. +*/ +TYPEDEF_OCTET_STRING(MIH_C_FQDN, 253) +//------------------------------------------- +// TBD FREQ_BANDS +/*! \var MIH_C_FREQ_ID_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief Identifier of the carrier frequency. Valid Range: 0..65535 +*/ +TYPEDEF_INTEGER2(MIH_C_FREQ_ID) +//------------------------------------------- +/*! \var MIH_C_FQ_CODE_NUM_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief UMTS scrambling code, cdma2000 Walsh code. +* Valid Range: 0..65535 +*/ +TYPEDEF_INTEGER2(MIH_C_FQ_CODE_NUM) +//------------------------------------------- +/*! \var MIH_C_IP4_ADDR_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief An IPv4 address as described in IETF RFC 791 +*/ +TYPEDEF_OCTET(MIH_C_IP4_ADDR, 4) +/*! \var MIH_C_IP6_ADDR_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief An IPv6 address as described in IETF RFC 4291 +*/ +TYPEDEF_OCTET(MIH_C_IP6_ADDR, 16) + +/*! \var MIH_C_DHCP_SERV_T +* \ingroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION +* \brief IP address of candidate DHCP Server. It is only +* included when dynamic address configuration is supported. +*/ +typedef MIH_C_IP_ADDR_T MIH_C_DHCP_SERV_T; +/*! \var MIH_C_FN_AGNT_T +* \ingroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION +* \brief IP address of candidate Foreign Agent. It is only included when Mobile IPv4 is supported. +*/ +typedef MIH_C_IP_ADDR_T MIH_C_FN_AGNT_T; +/*! \var MIH_C_ACC_RTR_T +* \ingroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION +* \brief IP address of candidate Access Router. It is only +* included when IPv6 Stateless configuration is supported. +*/ +typedef MIH_C_IP_ADDR_T MIH_C_ACC_RTR_T; +//------------------------------------------- +/*! \struct MIH_C_IP_CONFIG_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief IP Configuration Methods supported by the access network. +*/ +typedef struct MIH_C_IP_CONFIG + { + MIH_C_IP_CFG_MTHDS_T ip_cfg_mthds; + MIH_C_CHOICE_T choice_dhcp_serv; + union { + MIH_C_NULL_T null_attr; + MIH_C_DHCP_SERV_T dhcp_serv; + } _union_dhcp_serv; + MIH_C_CHOICE_T choice_fn_agnt; + union { + MIH_C_NULL_T null_attr; + MIH_C_FN_AGNT_T fn_agnt; + } _union_fn_agnt; + MIH_C_CHOICE_T choice_acc_rtr; + union { + MIH_C_NULL_T null_attr; + MIH_C_ACC_RTR_T acc_rtr; + } _union_acc_rtr; +} MIH_C_IP_CONFIG_T; +//------------------------------------------- +#define MIH_C_BIT_NET_CAPS_SECURITY MIH_C_BIT_0_VALUE +#define MIH_C_BIT_NET_CAPS_QOS_CLASS0 MIH_C_BIT_1_VALUE +#define MIH_C_BIT_NET_CAPS_QOS_CLASS1 MIH_C_BIT_2_VALUE +#define MIH_C_BIT_NET_CAPS_QOS_CLASS2 MIH_C_BIT_3_VALUE +#define MIH_C_BIT_NET_CAPS_QOS_CLASS3 MIH_C_BIT_4_VALUE +#define MIH_C_BIT_NET_CAPS_QOS_CLASS4 MIH_C_BIT_5_VALUE +#define MIH_C_BIT_NET_CAPS_QOS_CLASS5 MIH_C_BIT_6_VALUE +#define MIH_C_BIT_NET_CAPS_INTERNET_ACCESS MIH_C_BIT_7_VALUE +#define MIH_C_BIT_NET_CAPS_EMERGENCY_SERVICES MIH_C_BIT_8_VALUE +#define MIH_C_BIT_NET_CAPS_MIH_CAPABILITY MIH_C_BIT_9_VALUE +/*! \var MIH_C_NET_CAPS_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief These bits provide high level capabilities supported on a network. +* Bitmap Values: +* Bit 0: Security – Indicates that some level of security is supported when set. +* Bit 1: QoS Class 0 – Indicates that QoS for class 0 is supported when set. +* Bit 2: QoS Class 1 – Indicates that QoS for class 1 is supported when set. +* Bit 3: QoS Class 2 – Indicates that QoS for class 2 is supported when set; Otherwise, no QoS for class 2 support is available. +* Bit 4: QoS Class 3 – Indicates that QoS for class 3 is supported when set; Otherwise, no QoS for class 3 support is available. +* Bit 5: QoS Class 4 – Indicates that QoS for class 4 is supported when set; Otherwise, no QoS for class 4 support is available. +* Bit 6: QoS Class 5 – Indicates that QoS for class 5 is supported when set; Otherwise, no QoS for class 5 support is available. +* Bit 7: Internet Access – Indicates that Internet access is supported when set; Otherwise, no Internet access support is available. +* Bit 8: Emergency Services – Indicates that some level of emergency services is supported when set; Otherwise, no emergency service support is available. +* Bit 9: MIH Capability – Indicates that MIH is supported when set; Otherwise, no MIH support is available. +* Bit 10–31: (Reserved) +*/ +TYPEDEF_BITMAP32(MIH_C_NET_CAPS) +//------------------------------------------- +/*! \var MIH_C_SUBTYPE_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A network subtype. See Table F.14. +*/ +TYPEDEF_BITMAP64(MIH_C_SUBTYPE) +//------------------------------------------- + +//------------------------------------------- +/*! \struct MIH_C_NETWORK_TYPE_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent a network type and its subtype. +* See Table F.14 for details. +*/ +typedef struct MIH_C_NETWORK_TYPE + { + MIH_C_CHOICE_T choice_link_type; + union { + MIH_C_NULL_T null_attr; + MIH_C_LINK_TYPE_T link_type; + } _union_link_type; + MIH_C_CHOICE_T choice_subtype; + union { + MIH_C_NULL_T null_attr; + MIH_C_SUBTYPE_T subtype; + } _union_subtype; + MIH_C_CHOICE_T choice_type_ext; + union { + MIH_C_NULL_T null_attr; + MIH_C_TYPE_EXT_T type_ext; + } _union_type_ext; +} MIH_C_NETWORK_TYPE_T; +//------------------------------------------- +/*! \var MIH_C_OP_NAME_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent an operator name. The value +* uniquely identifies the operator name within the scope +* of the OP_NAMESPACE. +* The value is a non NULL terminated string whose +* length shall not exceed 253 octets. +*/ +TYPEDEF_OCTET_STRING(MIH_C_OP_NAME, 253) +//------------------------------------------- +/*! \var MIH_C_OP_NAMESPACE_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent a type of operator name. +* 0: GSM/UMTS +* 1: CDMA +* 2: REALM (as defined in [B28]). +* 3: ITU-T/TSB +* 4: General +* 5–255: (Reserved) +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_OP_NAMESPACE) +//------------------------------------------- +/*! \struct MIH_C_OPERATOR_ID_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent an operator identifier. +*/ +typedef struct MIH_C_OPERATOR_ID { + MIH_C_OP_NAME_T opname; + MIH_C_OP_NAMESPACE_T opnamespace; +} MIH_C_OPERATOR_ID_T; +//------------------------------------------- +/*! \struct MIH_C_SIB_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A type to represent UMTS system information block (SIB). +*/ +typedef struct MIH_C_SIB { + MIH_C_CELL_ID_T cell_id; + MIH_C_FQ_CODE_NUM_T fq_code_num; +} MIH_C_SIB_T; +//------------------------------------------- +/*! \var MIH_C_PILOT_PN_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief Pilot PN sequence offset index. +*/ +TYPEDEF_INTEGER2(MIH_C_PILOT_PN) +//------------------------------------------- +/*! \struct MIH_C_SYS_PARAMS_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief CDMA2000 system parameters. +*/ +typedef struct MIH_C_SYS_PARAMS { + MIH_C_BASE_ID_T base_id; + MIH_C_PILOT_PN_T pilot_pn; + MIH_C_FREQ_ID_T freq_id; + MIH_C_BAND_CLASS_T band_class; +} MIH_C_SYS_PARAMS_T; +//------------------------------------------- +/*! \struct MIH_C_MIH_C_PARAMETERS_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A data type to represent system information depending on the network type. +* DCD_UCD: IEEE 802.16 +* SIB: UMTS +* SYS_PARAMS: cdma2000 +*/ +typedef struct MIH_C_PARAMETERS { + MIH_C_CHOICE_T choice; + union { + MIH_C_DCD_UCD_T dcd_ucd; + MIH_C_SIB_T sib; + MIH_C_SYS_PARAMS_T sys_params; + } _union; +} MIH_C_MIH_C_PARAMETERS_T; +//------------------------------------------- +/*! \struct MIH_C_PROXY_ADDR_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief L3 address of a proxy server. +*/ +typedef struct MIH_C_PROXY_ADDR { + MIH_C_CHOICE_T choice; + union { + MIH_C_IP4_ADDR_T ip4_addr; + MIH_C_IP6_ADDR_T ip6_addr; + MIH_C_FQDN_T fqdn; + } _union; +} MIH_C_PROXY_ADDR_T; +//------------------------------------------- +// TBD REGU_DOMAIN +// TBD ROAMING_PTNS +/*! \var MIH_C_SP_ID_T +* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS +* \brief A service provider identifier. +* A non-NULL terminated string whose length shall not exceed 253 octets. +*/ +TYPEDEF_OCTET_STRING(MIH_C_SP_ID, 253) +// TBD SUPPORTED_LCP +// TBD SYSTEM_INFO + + + + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.19 Data type for MIHF identification +//----------------------------------------------------------------------------- +/** \defgroup MIH_C_F19_DATA_TYPE_FOR_MIHF_IDENTIFICATION Data types for MIHF identification + * \ingroup MIH_C_INTERFACE + * + * @{ + */ +/*! \var MIH_C_MIHF_ID_T +* \brief The MIHF Identifier: MIHF_ID is a network access identifier (NAI). +* NAI shall be unique as per IETF RFC 4282. If L3 communication is +* used and MIHF entity resides in the network node, then MIHF_ID is +* the fully qualified domain name or NAI-encoded IP address +* (IP4_ADDR or IP6_ADDR) of the entity that hosts the MIH Services. +* If L2 communication is used then MIHF_ID is the NAI-encoded link- +* layer address (LINK_ADDR) of the entity that hosts the MIH ser- +* vices. In an NAI-encoded IP address or link-layer address, each octet +* of binary-encoded IP4_ADDR, IP6_ADDR and LINK_ADDR data is +* encoded in the username part of the NAI as “\†followed by the octet +* value. A multicast MIHF identifier is defined as an MIHF ID of zero +* length. When an MIH protocol message with multicast MIHF ID is +* transmitted over the L2 data plane, a group MAC address (01-80-C2- +* 00-00-0E) shall be used (see IEEE P802.1aj/D2.2). The maximum +* length is 253 octets. +*/ +TYPEDEF_OCTET_STRING(MIH_C_MIHF_ID, 253) +/** @}*/ + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.20—Data type for MIH capabilities +//----------------------------------------------------------------------------- +/** \defgroup MIH_C_F19_DATA_TYPE_FOR_MIHF_CAPABILITIES Data type for MIH capabilities + * \ingroup MIH_C_INTERFACE + * + * @{ + */ +/*! \struct MIH_C_LINK_DET_CFG_T +* \brief A data type for configuring link detected event trigger. +*/ +typedef struct MIH_C_LINK_DET_CFG { + MIH_C_CHOICE_T choice_network_id; + union { + MIH_C_NULL_T null_attr; + MIH_C_NETWORK_ID_T network_id; + } _union_network_id; + MIH_C_CHOICE_T choice_sig_strength; + union { + MIH_C_NULL_T null_attr; + MIH_C_SIG_STRENGTH_T sig_strength; + } _union_sig_strength; + MIH_C_CHOICE_T choice_link_data_rate; + union { + MIH_C_NULL_T null_attr; + MIH_C_LINK_DATA_RATE_T link_data_rate; + } _union_link_data_rate; +} MIH_C_LINK_DET_CFG_T; +//------------------------------------------- +/*! \struct MIH_C_EVT_CFG_INFO_T +* \brief Represents additional configuration information +* for event subscription. The list of +* LINK_DET_CFG contains additional filtering +* when subscribing to link detected events. The list +* of LINK_CFG_PARAM contains additional fil- +* tering when subscribing to link parameter report +* events. +*/ +typedef struct MIH_C_EVT_CFG_INFO { + MIH_C_CHOICE_T choice; + union { + MIH_C_LINK_DET_CFG_T link_det_cfg; + MIH_C_LINK_CFG_PARAM_T link_cfg_param; + } _union; +} MIH_C_EVT_CFG_INFO_T; +//------------------------------------------- +/*! \struct MIH_C_LINK_DET_INFO_T +* \brief Information of a detected link. +* LINK_TUPLE_ID is the link detected. +* NETWORK_ID is the access network identifier. +* NET_AUX_ID is an auxiliary access network identifier if applicable. +* SIG_STRENGTH is the signal strength of the detected link. +* UNSIGNED_INT(2) is the SINR value of the link. +* LINK_DATA_RATE is the maximum transmission rate on the detected link. +* LINK_MIHCAP_FLAG indicates which MIH capabilities are supported on the detected link. +* NET_CAPS is the network capability supported by the network link. +*/ +typedef struct MIH_C_LINK_DET_INFO { + MIH_C_LINK_TUPLE_ID_T link_tuple_id; + MIH_C_NETWORK_ID_T network_id; + MIH_C_NET_AUX_ID_T net_aux_id; + MIH_C_SIG_STRENGTH_T sig_strength; + UNSIGNED_INT2(sinr) + MIH_C_LINK_DATA_RATE_T link_data_rate; + MIH_C_LINK_MIHCAP_FLAG_T link_mihcap_flag; + MIH_C_NET_CAPS_T net_caps; +} MIH_C_LINK_DET_INFO_T; +//------------------------------------------- +/*! \struct MIH_C_MBB_HO_SUPP_T +* \brief Indicates if make before break is supported FROM the first network type TO the second network type. +* The BOOLEAN value assignment: +* True: Make before break is supported. +* False: Make before break is not supported. +*/ +typedef struct MIH_C_MBB_HO_SUPP { + MIH_C_NETWORK_TYPE_T from; + MIH_C_NETWORK_TYPE_T to; + BOOLEAN(supported) +} MIH_C_MBB_HO_SUPP_T; +//------------------------------------------- +#define MIH_C_BIT_MIH_CMD_MIH_LINK_GET_PARAMETERS MIH_C_BIT_0_VALUE +#define MIH_C_BIT_MIH_CMD_MIH_LINK_CONFIGURE_THRESHOLDS MIH_C_BIT_1_VALUE +#define MIH_C_BIT_MIH_CMD_MIH_LINK_ACTIONS MIH_C_BIT_2_VALUE +#define MIH_C_BIT_MIH_CMD_MIH_NET_HO_CANDIDATE_QUERY MIH_C_BIT_3_VALUE +#define MIH_C_BIT_MIH_CMD_MIH_NET_HO_COMMIT MIH_C_BIT_3_VALUE +#define MIH_C_BIT_MIH_CMD_MIH_N2N_HO_QUERY_RESOURCES MIH_C_BIT_3_VALUE +#define MIH_C_BIT_MIH_CMD_MIH_N2N_HO_COMMIT MIH_C_BIT_3_VALUE +#define MIH_C_BIT_MIH_CMD_MIH_N2N_HO_COMPLETE MIH_C_BIT_3_VALUE +#define MIH_C_BIT_MIH_CMD_MIH_MN_HO_CANDIDATE_QUERY MIH_C_BIT_4_VALUE +#define MIH_C_BIT_MIH_CMD_MIH_MN_HO_COMMIT MIH_C_BIT_4_VALUE +#define MIH_C_BIT_MIH_CMD_MIH_MN_HO_COMPLETE MIH_C_BIT_4_VALUE + +/*! \var MIH_C_MIH_CMD_LIST_T +* \brief A list of MIH commands. +* Bitmap Values: +* Bit 0: MIH_Link_Get_Parameters +* Bit 1: MIH_Link_Configure_Thresholds +* Bit 2: MIH_Link_Actions +* Bit 3: MIH_Net_HO_Candidate_Query +* MIH_Net_HO_Commit +* MIH_N2N_HO_Query_Resources +* MIH_N2N_HO_Commit +* MIH_N2N_HO_Complete +* Bit 4: MIH_MN_HO_Candidate_Query +* MIH_MN_HO_Commit +* MIH_MN_HO_Complete +* Bit 5–31: (Reserved) + +*/ +TYPEDEF_BITMAP32(MIH_C_MIH_CMD_LIST) + +//------------------------------------------- +#define MIH_C_BIT_MIH_LINK_DETECTED MIH_C_BIT_0_VALUE +#define MIH_C_BIT_MIH_LINK_UP MIH_C_BIT_1_VALUE +#define MIH_C_BIT_MIH_LINK_DOWN MIH_C_BIT_2_VALUE +#define MIH_C_BIT_MIH_LINK_PARAMETERS_REPORT MIH_C_BIT_3_VALUE +#define MIH_C_BIT_MIH_LINK_GOING_DOWN MIH_C_BIT_4_VALUE +#define MIH_C_BIT_MIH_LINK_HANDOVER_IMMINENT MIH_C_BIT_5_VALUE +#define MIH_C_BIT_MIH_LINK_HANDOVER_COMPLETE MIH_C_BIT_6_VALUE +#define MIH_C_BIT_MIH_LINK_PDU_TRANSMIT_STATUS MIH_C_BIT_7_VALUE +/*! \var MIH_C_MIH_EVT_LIST_T +* \brief A list of MIH events. +* Bitmap Values: +* Bit 0: MIH_Link_Detected +* Bit 1: MIH_Link_Up +* Bit 2: MIH_Link_Down +* Bit 3: MIH_Link_Parameters_Report +* Bit 4: MIH_Link_Going_Down +* Bit 5: MIH_Link_Handover_Imminent +* Bit 6: MIH_Link_Handover_Complete +* Bit 7: MIH_Link_PDU_Transmit_Status +* Bit 8–31: (Reserved) +*/ +TYPEDEF_BITMAP32(MIH_C_MIH_EVT_LIST) +//------------------------------------------- +#define MIH_C_BIT_BINARY_DATA MIH_C_BIT_0_VALUE +#define MIH_C_BIT_RDF_DATA MIH_C_BIT_1_VALUE +#define MIH_C_BIT_RDF_SCHEMA_URL MIH_C_BIT_2_VALUE +#define MIH_C_BIT_RDF_SCHEMA MIH_C_BIT_3_VALUE +#define MIH_C_BIT_IE_NETWORK_TYPE MIH_C_BIT_4_VALUE +#define MIH_C_BIT_IE_OPERATOR_ID MIH_C_BIT_5_VALUE +#define MIH_C_BIT_IE_SERVICE_PROVIDER_ID MIH_C_BIT_6_VALUE +#define MIH_C_BIT_IE_COUNTRY_CODE MIH_C_BIT_7_VALUE +#define MIH_C_BIT_IE_NETWORK_ID MIH_C_BIT_8_VALUE +#define MIH_C_BIT_IE_NETWORK_AUX_ID MIH_C_BIT_9_VALUE +#define MIH_C_BIT_IE_ROAMING_PARTNERS MIH_C_BIT_10_VALUE +#define MIH_C_BIT_IE_COST MIH_C_BIT_11_VALUE +#define MIH_C_BIT_IE_NETWORK_QOS MIH_C_BIT_12_VALUE +#define MIH_C_BIT_IE_NETWORK_DATA_RATE MIH_C_BIT_13_VALUE +#define MIH_C_BIT_IE_NET_REGULT_DOMAIN MIH_C_BIT_14_VALUE +#define MIH_C_BIT_IE_NET_FREQUENCY_BANDS MIH_C_BIT_15_VALUE +#define MIH_C_BIT_IE_NET_IP_CFG_METHODS MIH_C_BIT_16_VALUE +#define MIH_C_BIT_IE_NET_CAPABILITIES MIH_C_BIT_17_VALUE +#define MIH_C_BIT_IE_NET_SUPPORTED_LCP MIH_C_BIT_18_VALUE +#define MIH_C_BIT_IE_NET_MOB_MGMT_PROT MIH_C_BIT_19_VALUE +#define MIH_C_BIT_IE_NET_EMSERV_PROXY MIH_C_BIT_20_VALUE +#define MIH_C_BIT_IE_NET_IMS_PROXY_CSCF MIH_C_BIT_21_VALUE +#define MIH_C_BIT_IE_NET_MOBILE_NETWORK MIH_C_BIT_22_VALUE +#define MIH_C_BIT_IE_POA_LINK_ADDR MIH_C_BIT_23_VALUE +#define MIH_C_BIT_IE_POA_LOCATION MIH_C_BIT_24_VALUE +#define MIH_C_BIT_IE_POA_CHANNEL_RANGE MIH_C_BIT_25_VALUE +#define MIH_C_BIT_IE_POA_SYSTEM_INFO MIH_C_BIT_26_VALUE +#define MIH_C_BIT_IE_POA_SUBNET_INFO MIH_C_BIT_27_VALUE +#define MIH_C_BIT_IE_POA_IP_ADDR MIH_C_BIT_28_VALUE +/*! \var MIH_C_MIH_IQ_TYPE_LST_T +* \brief A list of IS query types. +* Bitmap Values: +* Bit 0: Binary data +* Bit 1: RDF data +* Bit 2: RDF schema URL +* Bit 3: RDF schema +* Bit 4: IE_NETWORK_TYPE +* Bit 5: IE_OPERATOR_ID +* Bit 6: IE_SERVICE_PROVIDER_ID +* Bit 7: IE_COUNTRY_CODE +* Bit 8: IE_NETWORK_ID +* Bit 9: IE_NETWORK_AUX_ID +* Bit 10: IE_ROAMING_PARTNERS +* Bit 11: IE_COST +* Bit 12: IE_NETWORK_QOS +* Bit 13: IE_NETWORK_DATA_RATE +* Bit 14: IE_NET_REGULT_DOMAIN +* Bit 15: IE_NET_FREQUENCY_BANDS +* Bit 16: IE_NET_IP_CFG_METHODS +* Bit 17: IE_NET_CAPABILITIES +* Bit 18: IE_NET_SUPPORTED_LCP +* Bit 19: IE_NET_MOB_MGMT_PROT +* Bit 20: IE_NET_EMSERV_PROXY +* Bit 21: IE_NET_IMS_PROXY_CSCF +* Bit 22: IE_NET_MOBILE_NETWORK +* Bit 23: IE_POA_LINK_ADDR +* Bit 24: IE_POA_LOCATION +* Bit 25: IE_POA_CHANNEL_RANGE +* Bit 26: IE_POA_SYSTEM_INFO +* Bit 27: IE_POA_SUBNET_INFO +* Bit 28: IE_POA_IP_ADDR +* Bit 29–63: (Reserved) +*/ +TYPEDEF_BITMAP64(MIH_C_MIH_IQ_TYPE_LST) +//------------------------------------------- +#define MIH_C_BIT_UDP MIH_C_BIT_0_VALUE +#define MIH_C_BIT_TCP MIH_C_BIT_1_VALUE +/*! \var MIH_C_MIH_TRANS_LST_T +* \brief A list of supported transports. +* Bitmap Values: +* Bit 0: UDP +* Bit 1: TCP +* Bit 2–15: (Reserved) +*/ +TYPEDEF_BITMAP16(MIH_C_MIH_TRANS_LST) +//------------------------------------------- +/*! \struct MIH_C_NET_TYPE_ADDR_T +* \brief Represent a link address of a specific network type. +*/ +typedef struct MIH_C_NET_TYPE_ADDR { + MIH_C_NETWORK_TYPE_T network_type; + MIH_C_LINK_ADDR_T link_addr; +} MIH_C_NET_TYPE_ADDR_T; +//------------------------------------------- +/** @}*/ + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.22—Data types for handover operation +//----------------------------------------------------------------------------- +/** \defgroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION Data type for handover operation + * \ingroup MIH_C_INTERFACE + * + * @{ + */ +//TBD ASGN_RES_SET +/*! \var MIH_C_HO_CAUSE_T +* \brief Represents the reason for performing a handover. +* Same enumeration list as link down reason code. +* See Table F.7 +*/ +TYPEDEF_UNSIGNED_INT1(MIH_C_HO_CAUSE) +//------------------------------------------- +/*! \var MIH_C_HO_RESULT_T +* \brief Handover result. +* 0: Success +* 1: Failure +* 2: Rejected +*/ +TYPEDEF_ENUMERATED(MIH_C_HO_RESULT) +#define MIH_C_HO_RESULT_SUCCESS (MIH_C_HO_RESULT_T)0 +#define MIH_C_HO_RESULT_FAILURE (MIH_C_HO_RESULT_T)1 +#define MIH_C_HO_RESULT_REJECTED (MIH_C_HO_RESULT_T)2 +//------------------------------------------- +/*! \var MIH_C_HO_STATUS_T +* \brief Represents the permission for handover. +* 0: HandoverPermitted +* 1: HandoverDeclined +*/ +TYPEDEF_ENUMERATED(MIH_C_HO_STATUS) +#define MIH_C_HO_STATUS_HANDOVER_PERMITTED (MIH_C_HO_STATUS_T)0 +#define MIH_C_HO_STATUS_HANDOVER_DECLINED (MIH_C_HO_STATUS_T)1 +//------------------------------------------- +/*! \var MIH_C_PREDEF_CFG_ID_T +* \brief Pre-defined configuration identifier. +* 0..255 +*/ +TYPEDEF_INTEGER1(MIH_C_PREDEF_CFG_ID) +//------------------------------------------- +//TBD RQ_RESULT +//TBD REQ_RES_SET +//TBD TGT_NET_INFO +//TBD TSP_CARRIER +//TBD TSP_CONTAINER +/** @}*/ + + +//----------------------------------------------------------------------------- +// STD 802.21-2008 Table F.23—Data type for MIH_NET_SAP primitives +//----------------------------------------------------------------------------- +/** \defgroup MIH_C_F23_DATA_TYPE_FOR_MIH_NET_SAP_PRIMITIVES Data type for MIH NET SAP primitives. + * \ingroup MIH_C_INTERFACE + * + * @{ + */ +/*! \var MIH_C_TRANSPORT_TYPE_T +* \brief The transport type supported: +* 0: L2 +* 1: L3 or higher layer protocols +*/ +TYPEDEF_ENUMERATED(MIH_C_TRANSPORT_TYPE) +#define MIH_C_TRANSPORT_TYPE_L2 (MIH_C_TRANSPORT_TYPE_T)0 +#define MIH_C_TRANSPORT_TYPE_L3_OR_HIGHER_PROTOCOLS (MIH_C_TRANSPORT_TYPE_T)1 + +/** @}*/ + + + + +/** + * \ingroup MIH_C_INTERFACE + * + * @{ + */ + +#define MIH_C_TLV_SOURCE_MIHF_ID (MIH_C_INTEGER1_T)1 +#define MIH_C_TLV_DESTINATION_MIHF_ID (MIH_C_INTEGER1_T)2 +#define MIH_C_TLV_STATUS (MIH_C_INTEGER1_T)3 +#define MIH_C_TLV_LINK_TYPE (MIH_C_INTEGER1_T)4 +#define MIH_C_TLV_MIH_EVENT_LIST (MIH_C_INTEGER1_T)5 +#define MIH_C_TLV_MIH_COMMAND_LIST (MIH_C_INTEGER1_T)6 +#define MIH_C_TLV_MIIS_QUERY_TYPE_LIST (MIH_C_INTEGER1_T)7 +#define MIH_C_TLV_TRANSPORT_OPTION_LIST (MIH_C_INTEGER1_T)8 +#define MIH_C_TLV_LINK_ADDRESS_LIST (MIH_C_INTEGER1_T)9 +#define MIH_C_TLV_MBB_HANDOVER_SUPPORT (MIH_C_INTEGER1_T)10 +#define MIH_C_TLV_REGISTER_REQUEST_CODE (MIH_C_INTEGER1_T)11 +#define MIH_C_TLV_VALID_TIME_INTERVAL (MIH_C_INTEGER1_T)12 +#define MIH_C_TLV_LINK_IDENTIFIER (MIH_C_INTEGER1_T)13 +#define MIH_C_TLV_NEW_LINK_IDENTIFIER (MIH_C_INTEGER1_T)14 +#define MIH_C_TLV_OLD_ACCESS_ROUTER (MIH_C_INTEGER1_T)15 +#define MIH_C_TLV_NEW_ACCESS_ROUTER (MIH_C_INTEGER1_T)16 +#define MIH_C_TLV_IP_RENEWAL_FLAG (MIH_C_INTEGER1_T)17 +#define MIH_C_TLV_MOBILITY_MANAGEMENT_SUPPORT (MIH_C_INTEGER1_T)18 +#define MIH_C_TLV_IP_ADDRESS_CONFIGURATION_METHODS (MIH_C_INTEGER1_T)19 +#define MIH_C_TLV_LINK_DOWN_REASON_CODE (MIH_C_INTEGER1_T)20 +#define MIH_C_TLV_LINK_TIME_INTERVAL (MIH_C_INTEGER1_T)21 +#define MIH_C_TLV_LINK_GOING_DOWN_REASON_CODE (MIH_C_INTEGER1_T)22 +#define MIH_C_TLV_LINK_PARAMETER_REPORT_LIST (MIH_C_INTEGER1_T)23 +#define MIH_C_TLV_DEVICE_STATES_REQUEST (MIH_C_INTEGER1_T)24 +#define MIH_C_TLV_LINK_IDENTIFIER_LIST (MIH_C_INTEGER1_T)25 +#define MIH_C_TLV_DEVICE_STATES_RESPONSE_LIST (MIH_C_INTEGER1_T)26 +#define MIH_C_TLV_GET_STATUS_REQUEST_SET (MIH_C_INTEGER1_T)27 +#define MIH_C_TLV_GET_STATUS_RESPONSE_LIST (MIH_C_INTEGER1_T)28 +#define MIH_C_TLV_CONFIGURE_REQUEST_LIST (MIH_C_INTEGER1_T)29 +#define MIH_C_TLV_CONFIGURE_RESPONSE_LIST (MIH_C_INTEGER1_T)30 +#define MIH_C_TLV_LIST_OF_LINK_POA_LIST (MIH_C_INTEGER1_T)31 +#define MIH_C_TLV_PREFERRED_LINK_LIST (MIH_C_INTEGER1_T)32 +#define MIH_C_TLV_HANDOVER_RESOURCE_QUERY_LIST (MIH_C_INTEGER1_T)33 +#define MIH_C_TLV_HANDOVER_STATUS (MIH_C_INTEGER1_T)34 +#define MIH_C_TLV_ACCESS_ROUTER_ADDRESS (MIH_C_INTEGER1_T)35 +#define MIH_C_TLV_DHCP_SERVER_ADDRESS (MIH_C_INTEGER1_T)36 +#define MIH_C_TLV_FA_ADDRESS (MIH_C_INTEGER1_T)37 +#define MIH_C_TLV_LINK_ACTIONS_LIST (MIH_C_INTEGER1_T)38 +#define MIH_C_TLV_LINK_ACTIONS_RESULT_LIST (MIH_C_INTEGER1_T)39 +#define MIH_C_TLV_HANDOVER_RESULT (MIH_C_INTEGER1_T)40 +#define MIH_C_TLV_RESOURCE_STATUS (MIH_C_INTEGER1_T)41 +#define MIH_C_TLV_RESOURCE_RETENTION_STATUS (MIH_C_INTEGER1_T)42 +#define MIH_C_TLV_INFO_QUERY_BINARY_DATA_LIST (MIH_C_INTEGER1_T)43 +#define MIH_C_TLV_INFO_QUERY_RDF_DATA_LIST (MIH_C_INTEGER1_T)44 +#define MIH_C_TLV_INFO_QUERY_RDF_SCHEMA_URL (MIH_C_INTEGER1_T)45 +#define MIH_C_TLV_INFO_QUERY_RDF_SCHEMA_LIST (MIH_C_INTEGER1_T)46 +#define MIH_C_TLV_MAX_RESPONSE_SIZE (MIH_C_INTEGER1_T)47 +#define MIH_C_TLV_INFO_RESPONSE_BINARY_DATA_LIST (MIH_C_INTEGER1_T)48 +#define MIH_C_TLV_INFO_RESPONSE_RDF_DATA_LIST (MIH_C_INTEGER1_T)49 +#define MIH_C_TLV_INFO_RESPONSE_RDF_SCHEMA_URL_LIST (MIH_C_INTEGER1_T)50 +#define MIH_C_TLV_INFO_RESPONSE_RDF_SCHEMA_LIST (MIH_C_INTEGER1_T)51 +#define MIH_C_TLV_MOBILE_NODE_MIHF_ID (MIH_C_INTEGER1_T)52 +#define MIH_C_TLV_QUERY_RESOURCE_REPORT_FLAG (MIH_C_INTEGER1_T)53 +#define MIH_C_TLV_EVENT_CONFIGURATION_INFO_LIST (MIH_C_INTEGER1_T)54 +#define MIH_C_TLV_TARGET_NETWORK_INFO (MIH_C_INTEGER1_T)55 +#define MIH_C_TLV_LIST_OF_TARGET_NETWORK_INFO (MIH_C_INTEGER1_T)56 +#define MIH_C_TLV_ASSIGNED_RESOURCE_SET (MIH_C_INTEGER1_T)57 +#define MIH_C_TLV_LINK_DETECTED_INFO_LIST (MIH_C_INTEGER1_T)58 +#define MIH_C_TLV_MN_LINK_ID (MIH_C_INTEGER1_T)59 +#define MIH_C_TLV_POA (MIH_C_INTEGER1_T)60 +#define MIH_C_TLV_UNAUTHENTICATED_INFORMATION_REQUEST (MIH_C_INTEGER1_T)61 +#define MIH_C_TLV_NETWORK_TYPE (MIH_C_INTEGER1_T)62 +#define MIH_C_TLV_REQUESTED_RESOURCE_SET (MIH_C_INTEGER1_T)63 + +#ifdef MIH_C_MEDIEVAL_EXTENSIONS +# define MIH_C_TLV_LINK_EVENT_LIST (MIH_C_INTEGER1_T)101 +# define MIH_C_TLV_LINK_CMD_LIST (MIH_C_INTEGER1_T)102 +# define MIH_C_TLV_LINK_PARAM_TYPE_LIST (MIH_C_INTEGER1_T)103 +# define MIH_C_TLV_LINK_PARAMETERS_STATUS_LIST (MIH_C_INTEGER1_T)104 +# define MIH_C_TLV_LINK_STATES_REQ (MIH_C_INTEGER1_T)105 +# define MIH_C_TLV_LINK_STATES_RSP_LIST (MIH_C_INTEGER1_T)106 +# define MIH_C_TLV_LINK_DESC_REQ (MIH_C_INTEGER1_T)107 +# define MIH_C_TLV_LINK_DESC_RSP_LIST (MIH_C_INTEGER1_T)108 +# define MIH_C_TLV_LINK_ACTION (MIH_C_INTEGER1_T)109 +# define MIH_C_TLV_LINK_AC_RESULT (MIH_C_INTEGER1_T)110 +# define MIH_C_TLV_LINK_SCAN_RSP_LIST (MIH_C_INTEGER1_T)111 +# define MIH_C_TLV_LINK_DET_INFO (MIH_C_INTEGER1_T)112 +# define MIH_C_TLV_LINK_INTERFACE_TYPE_ADDR (MIH_C_INTEGER1_T)113 +# define MIH_C_TLV_MOS_DSCV (MIH_C_INTEGER1_T)114 +#endif +/** @}*/ + +//----------------------------------------------------------------------------- +#endif