/******************************************************************************* 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 . 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 #include #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