diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h
index 4ff08514e7..1ac42be1e9 100755
--- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h
+++ b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h
@@ -1,3073 +1,3070 @@
-/*******************************************************************************
- OpenAirInterface
- Copyright(c) 1999 - 2014 Eurecom
-
- OpenAirInterface is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
-
- OpenAirInterface is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with OpenAirInterface.The full GNU General Public License is
- included in this distribution in the file called "COPYING". If not,
- see .
-
- 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
+/*******************************************************************************
+ 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