blob: 0e3b0085e929a6b38cf089f3473e31633346d091 [file] [log] [blame]
/***********************************
* N3CF Config Macro definition
***********************************/
/***********************************
* Reset Macro
***********************************/
/* Copy from IWLAN, but seems to not use in N3CF */
#undef N3CF_CFG_TYPE_START
#undef N3CF_CFG_TYPE_DCL
#undef N3CF_CFG_TYPE_ARRAY
#undef N3CF_CFG_TYPE_END
#undef N3CF_CFG_L1_TYPE_START
#undef N3CF_CFG_L1_TYPE_DCL
#undef N3CF_CFG_L1_TYPE_ARRAY
#undef N3CF_CFG_L1_TYPE_END
#undef N3CF_CFG_L2_TYPE_START
#undef N3CF_CFG_L2_TYPE_DCL
#undef N3CF_CFG_L2_TYPE_ARRAY
#undef N3CF_CFG_L2_TYPE_END
/************************************************/
#undef N3CF_CFG_L0_TYPE_START
#undef N3CF_CFG_L0_TYPE_DCL
#undef N3CF_CFG_L0_TYPE_ARRAY
#undef N3CF_CFG_L0_TYPE_END
#define N3CF_CUST_ACTION_FUNCTION 10
/****************************************
* N3CF CFG Macro Structure Definition
****************************************/
#if __N3CF_CFG_ACTION__ == 1
/* ============= *
* Layer 0 obj *
* ============= */
#if __N3CF_CFG_LAYER__ == 0
#define N3CF_CFG_L0_TYPE_START(_obj0, _desc) \
typedef struct _ ## _obj0 ## _t {
#define N3CF_CFG_L0_TYPE_DCL(_obj0, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
_type _name;
#define N3CF_CFG_L0_TYPE_ARRAY(_obj0, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
_type _name[_size];
#define N3CF_CFG_L1_TYPE_START(_obj0, _obj1) \
_obj1 ## _t _obj1;
#define N3CF_CFG_L0_TYPE_END(_obj0) \
} _obj0 ## _t;
/* ============= *
* Layer 1 obj *
* ============= */
#elif __N3CF_CFG_LAYER__ == 1
#define N3CF_CFG_L1_TYPE_START(_obj0, _obj1) \
typedef struct _ ## _obj1 ## _t {
#define N3CF_CFG_L1_TYPE_DCL(_obj0, _obj1, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
_type _name;
#define N3CF_CFG_L1_TYPE_ARRAY(_obj0, _obj1, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
_type _name[_size];
#define N3CF_CFG_L2_TYPE_START(_obj0, _obj1, _obj2) \
_obj2 ## _t _obj2;
#define N3CF_CFG_L1_TYPE_END(_obj0, _obj1) \
} _obj1 ## _t;
/* ============= *
* Layer 2 obj *
* ============= */
#elif __N3CF_CFG_LAYER__ == 2 /* layer 2 obj*/
#define N3CF_CFG_L2_TYPE_START(_obj0, _obj1, _obj2) \
typedef struct _ ## _obj2 ## _t {
#define N3CF_CFG_L2_TYPE_DCL(_obj0, _obj1, _obj2, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
_type _name;
#define N3CF_CFG_L2_TYPE_ARRAY(_obj0, _obj1, _obj2, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
_type _name[_size];
#define N3CF_CFG_L2_TYPE_END(_obj0, _obj1, _obj2) \
} _obj2 ## _t;
#endif
/****************************************
* N3CF CFG Macro Structure Value Assign
****************************************/
#elif __N3CF_CFG_ACTION__ == 2
#define N3CF_CFG_L0_TYPE_DCL(_obj0, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
(__N3CF_CFG_PTR__)->_obj0._name = _cfg_dflt;
#define N3CF_CFG_L1_TYPE_DCL(_obj0, _obj1, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
(__N3CF_CFG_PTR__)->_obj0._obj1._name = _cfg_dflt;
#define N3CF_CFG_L2_TYPE_DCL(_obj0, _obj1, _obj2, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
(__N3CF_CFG_PTR__)->_obj0._obj1._obj2._name = _cfg_dflt;
/* WARNING: It should declare var _cfg_idx_ locally */
#define N3CF_CFG_L0_TYPE_ARRAY(_obj0, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
kal_snprintf((kal_char *)(__N3CF_CFG_PTR__)->_obj0._name, _size, "%s", _cfg_dflt);
#define N3CF_CFG_L1_TYPE_ARRAY(_obj0, _obj1, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
for (_cfg_idx_ = 0; _cfg_idx_ < _size; ++_cfg_idx_) { \
(__N3CF_CFG_PTR__)->_obj0._obj1._name[_cfg_idx_] = _cfg_dflt; \
}
#define N3CF_CFG_L2_TYPE_ARRAY(_obj0, _obj1, _obj2, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
for (_cfg_idx_ = 0; _cfg_idx_ < _size; ++_cfg_idx_) { \
(__N3CF_CFG_PTR__)->_obj0._obj1._obj2._name[_cfg_idx_] = _cfg_dflt; \
}
/****************************************
* N3CF CFG Macro NVRAN Value Assign
****************************************/
#elif __N3CF_CFG_ACTION__ == 3
#define N3CF_CFG_L0_TYPE_DCL(_obj0, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
if ((__N3CF_NVRAM_PTR__)->_obj0._name != (_type)(UNDEF_CONFIG)) { \
(__N3CF_CFG_PTR__)->_obj0._name = (__N3CF_NVRAM_PTR__)->_obj0._name; \
}
#define N3CF_CFG_L1_TYPE_DCL(_obj0, _obj1, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
if ((__N3CF_NVRAM_PTR__)->_obj0._obj1._name != (_type)(UNDEF_CONFIG)) { \
(__N3CF_CFG_PTR__)->_obj0._obj1._name = (__N3CF_NVRAM_PTR__)->_obj0._obj1._name; \
}
#define N3CF_CFG_L2_TYPE_DCL(_obj0, _obj1, _obj2, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
if ((__N3CF_NVRAM_PTR__)->_obj0._obj1._obj2._name != (_type)(UNDEF_CONFIG)) { \
(__N3CF_CFG_PTR__)->_obj0._obj1._obj2._name = (__N3CF_NVRAM_PTR__)->_obj0._obj1._obj2._name; \
}
/* WARNING: It should declare var _cfg_idx_ locally */
#define N3CF_CFG_L0_TYPE_ARRAY(_obj0, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
if ((__N3CF_NVRAM_PTR__)->_obj0._name[0] != (_type)(UNDEF_CONFIG)) { \
kal_mem_cpy((__N3CF_CFG_PTR__)->_obj0._name, (__N3CF_NVRAM_PTR__)->_obj0._name, _size); \
}
#define N3CF_CFG_L1_TYPE_ARRAY(_obj0, _obj1, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
for (_cfg_idx_ = 0; _cfg_idx_ < _size; ++_cfg_idx_) { \
if ((__N3CF_NVRAM_PTR__)->_obj0._obj1._name[_cfg_idx_] != (_type)(UNDEF_CONFIG)) { \
(__N3CF_CFG_PTR__)->_obj0._obj1._name[_cfg_idx_] = (__N3CF_NVRAM_PTR__)->_obj0._obj1._name[_cfg_idx_]; \
} \
}
#define N3CF_CFG_L2_TYPE_ARRAY(_obj0, _obj1, _obj2, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
for (_cfg_idx_ = 0; _cfg_idx_ < _size; ++_cfg_idx_) { \
if ((__N3CF_NVRAM_PTR__)->_obj0._obj1._obj2._name[_cfg_idx_] != (_type)(UNDEF_CONFIG)) { \
(__N3CF_CFG_PTR__)->_obj0._obj1._obj2._name[_cfg_idx_] = (__N3CF_NVRAM_PTR__)->_obj0._obj1._obj2._name[_cfg_idx_]; \
} \
}
/****************************************
* N3CF CFG Macro N3-group LOOKUP TABLE
****************************************/
#elif __N3CF_CFG_ACTION__ == 4
#define N3CF_CFG_L0_TYPE_DCL(_obj0, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
#_name,
#define N3CF_CFG_L1_TYPE_DCL(_obj0, _obj1, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
#_name,
#define N3CF_CFG_L2_TYPE_DCL(_obj0, _obj1, _obj2, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
#_name,
#define N3CF_CFG_L0_TYPE_ARRAY(_obj0, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
#_name,
/**********************************************
* N3CF CFG Macro N3-group LOOKUP TABLE ENUM
**********************************************/
#elif __N3CF_CFG_ACTION__ == 5
#define N3CF_CFG_L0_TYPE_DCL(_obj0, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
_enum,
#define N3CF_CFG_L1_TYPE_DCL(_obj0, _obj1, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
_enum,
#define N3CF_CFG_L2_TYPE_DCL(_obj0, _obj1, _obj2, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
_enum,
#define N3CF_CFG_L0_TYPE_ARRAY(_obj0, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
_enum,
#define N3CF_CFG_L0_ENUM_ALIAS(_enum1, _enum2) \
_enum1 = _enum2,
/************************************
* N3CF CFG Macro N3-group SET/GET
************************************/
#elif __N3CF_CFG_ACTION__ == 6
#define N3CF_CFG_L0_TYPE_DCL(_obj0, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
case _enum: { \
if (is_read == KAL_TRUE) { \
sprintf(in_out_ptr, "%d", (__N3CF_CFG_PTR__)->_obj0[N3CF_STACK_TYPE_ALL]._name); \
} \
else { \
N3CF_UPDATE_CTXVAL((__N3CF_CFG_PTR__)->_obj0[N3CF_STACK_TYPE_EM]._name, atoi((kal_char *)in_out_ptr), is_updt); \
(__N3CF_NVRAM_PTR__)->_obj0._name = (__N3CF_CFG_PTR__)->_obj0[N3CF_STACK_TYPE_EM]._name; \
} \
break; \
}
#define N3CF_CFG_L1_TYPE_DCL(_obj0, _obj1, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
case _enum: { \
if (is_read == KAL_TRUE) { \
sprintf(in_out_ptr, "%d", (__N3CF_CFG_PTR__)->_obj0._obj1._name); \
} \
else { \
N3CF_UPDATE_CTXVAL((__N3CF_CFG_PTR__)->_obj0._obj1._name, atoi((kal_char *)in_out_ptr), is_updt); \
(__N3CF_NVRAM_PTR__)->_obj0._obj1._name = (__N3CF_CFG_PTR__)->_obj0._obj1._name; \
} \
break; \
}
#define N3CF_CFG_L2_TYPE_DCL(_obj0, _obj1, _obj2, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
case _enum: { \
if (is_read == KAL_TRUE) { \
sprintf(in_out_ptr, "%d", (__N3CF_CFG_PTR__)->_obj0._obj1._obj2._name); \
} \
else { \
N3CF_UPDATE_CTXVAL((__N3CF_CFG_PTR__)->_obj0._obj1._obj2._name, atoi((kal_char *)in_out_ptr), is_updt); \
(__N3CF_NVRAM_PTR__)->_obj0._obj1._obj2._name = (__N3CF_CFG_PTR__)->_obj0._obj1._obj2._name; \
} \
break; \
}
#define N3CF_CFG_L0_TYPE_ARRAY(_obj0, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
case _enum: { \
if (is_read == KAL_TRUE) { \
result = kal_snprintf((kal_char *)in_out_ptr, _size, "%s", (kal_char *)((__N3CF_CFG_PTR__)->_obj0[N3CF_STACK_TYPE_ALL]._name)); \
} \
else { \
N3CF_UPDATE_CTXVAL_STRING((kal_char *)((__N3CF_CFG_PTR__)->_obj0[N3CF_STACK_TYPE_EM]._name), (kal_char *)in_out_ptr, _size, is_updt); \
result = kal_snprintf((kal_char *)((__N3CF_NVRAM_PTR__)->_obj0._name), _size, "%s", (kal_char *)((__N3CF_CFG_PTR__)->_obj0[N3CF_STACK_TYPE_EM]._name)); \
} \
break; \
}
/************************************
* N3CF CFG Macro N3-group overwrite
************************************/
#elif __N3CF_CFG_ACTION__ == 7
#define N3CF_CFG_L0_TYPE_DCL(_obj0, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
if ((__N3CF_OLD_CFG_PTR__)._name != (_type)(UNDEF_CONFIG)) { \
(__N3CF_NEW_CFG_PTR__)._name = (__N3CF_OLD_CFG_PTR__)._name; \
}
#define N3CF_CFG_L0_TYPE_ARRAY(_obj0, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
if ((__N3CF_OLD_CFG_PTR__)._name[0] != (_type)(UNDEF_CONFIG)) { \
kal_mem_cpy((__N3CF_NEW_CFG_PTR__)._name, (__N3CF_OLD_CFG_PTR__)._name, _size); \
}
/************************************
* N3CF CFG Macro N3-group provisioning
************************************/
#elif __N3CF_CFG_ACTION__ == 8
#define N3CF_CFG_L0_TYPE_DCL(_obj0, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
case _enum: { \
(__N3CF_PROVISION_PTR__)->_name = atoi((kal_char *)config_item.cfg_value); \
break; \
}
#define N3CF_CFG_L0_TYPE_ARRAY(_obj0, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
case _enum: { \
kal_snprintf((kal_char *)(__N3CF_PROVISION_PTR__)->_name, _size, "%s", config_item.cfg_value); \
break; \
}
/************************************
* N3CF CFG Macro fill description
************************************/
#elif __N3CF_CFG_ACTION__ == 9
#define N3CF_CFG_L0_TYPE_START(_obj0, _desc) \
_obj0: _desc
#define N3CF_CFG_L0_TYPE_DCL(_obj0, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
_obj0._name: _desc
#define N3CF_CFG_L0_TYPE_ARRAY(_obj0, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
_obj0._name: _desc
/************************************
* N3CF CFG Macro customized function
************************************/
#elif __N3CF_CFG_ACTION__ == N3CF_CUST_ACTION_FUNCTION /*10*/
/* __N3CF_CFG_LAYER__ == 0 */
#ifndef N3CF_CFG_L0_TYPE_DCL_CUST
#define N3CF_CFG_L0_TYPE_DCL_CUST(...)
#endif
#ifndef N3CF_CFG_L0_TYPE_ARRAY_CUST
#define N3CF_CFG_L0_TYPE_ARRAY_CUST(...)
#endif
#ifndef N3CF_CFG_L0_TYPE_START_CUST
#define N3CF_CFG_L0_TYPE_START_CUST(...)
#endif
#ifndef N3CF_CFG_L0_TYPE_END_CUST
#define N3CF_CFG_L0_TYPE_END_CUST(...)
#endif
#define N3CF_CFG_L0_TYPE_DCL(_obj0, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
N3CF_CFG_L0_TYPE_DCL_CUST(_obj0, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc)
#define N3CF_CFG_L0_TYPE_ARRAY(_obj0, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
N3CF_CFG_L0_TYPE_ARRAY_CUST(_obj0, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc)
#define N3CF_CFG_L0_TYPE_START(_obj0, _obj1) \
N3CF_CFG_L0_TYPE_START_CUST(_obj0, _obj1)
#define N3CF_CFG_L0_TYPE_END(_obj0) \
N3CF_CFG_L0_TYPE_END_CUST(_obj0)
/* __N3CF_CFG_LAYER__ == 1 */
#ifndef N3CF_CFG_L1_TYPE_START_CUST
#define N3CF_CFG_L1_TYPE_START_CUST(...)
#endif
#ifndef N3CF_CFG_L1_TYPE_DCL_CUST
#define N3CF_CFG_L1_TYPE_DCL_CUST(...)
#endif
#ifndef N3CF_CFG_L1_TYPE_ARRAY_CUST
#define N3CF_CFG_L1_TYPE_ARRAY_CUST(...)
#endif
#ifndef N3CF_CFG_L1_TYPE_END_CUST
#define N3CF_CFG_L1_TYPE_END_CUST(...)
#endif
#define N3CF_CFG_L1_TYPE_START(_obj0, _obj1) \
N3CF_CFG_L1_TYPE_START_CUST(_obj0, _obj1)
#define N3CF_CFG_L1_TYPE_DCL(_obj0, _obj1, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
N3CF_CFG_L1_TYPE_DCL_CUST(_obj0, _obj1, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc)
#define N3CF_CFG_L1_TYPE_ARRAY(_obj0, _obj1, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
N3CF_CFG_L1_TYPE_ARRAY_CUST(_obj0, _obj1, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc)
#define N3CF_CFG_L1_TYPE_END(_obj0, _obj1) \
N3CF_CFG_L1_TYPE_END_CUST(_obj0, _obj1)
/* __N3CF_CFG_LAYER__ == 2 */
#ifndef N3CF_CFG_L2_TYPE_START_CUST
#define N3CF_CFG_L2_TYPE_START_CUST(...)
#endif
#ifndef N3CF_CFG_L2_TYPE_DCL_CUST
#define N3CF_CFG_L2_TYPE_DCL_CUST(...)
#endif
#ifndef N3CF_CFG_L2_TYPE_ARRAY_CUST
#define N3CF_CFG_L2_TYPE_ARRAY_CUST(...)
#endif
#ifndef N3CF_CFG_L2_TYPE_END_CUST
#define N3CF_CFG_L2_TYPE_END_CUST(...)
#endif
#define N3CF_CFG_L2_TYPE_START(_obj0, _obj1, _obj2) \
N3CF_CFG_L2_TYPE_START_CUST(_obj0, _obj1, _obj2)
#define N3CF_CFG_L2_TYPE_DCL(_obj0, _obj1, _obj2, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc) \
N3CF_CFG_L2_TYPE_DCL_CUST(_obj0, _obj1, _obj2, _type, _enum, _name, _cfg_dflt, _nv_dflt, _desc)
#define N3CF_CFG_L2_TYPE_ARRAY(_obj0, _obj1, _obj2, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc) \
N3CF_CFG_L2_TYPE_ARRAY_CUST(_obj0, _obj1, _obj2, _type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc)
#define N3CF_CFG_L2_TYPE_END(_obj0, _obj1, _obj2) \
N3CF_CFG_L2_TYPE_END_CUST(_obj0, _obj1, _obj2)
#endif
/* If macro not used, define as emply */
#ifndef N3CF_CFG_L0_TYPE_START
#define N3CF_CFG_L0_TYPE_START(...)
#endif
#ifndef N3CF_CFG_L0_TYPE_DCL
#define N3CF_CFG_L0_TYPE_DCL(...)
#endif
#ifndef N3CF_CFG_L0_TYPE_ARRAY
#define N3CF_CFG_L0_TYPE_ARRAY(...)
#endif
#ifndef N3CF_CFG_L0_TYPE_END
#define N3CF_CFG_L0_TYPE_END(...)
#endif
#ifndef N3CF_CFG_L1_TYPE_START
#define N3CF_CFG_L1_TYPE_START(...)
#endif
#ifndef N3CF_CFG_L1_TYPE_DCL
#define N3CF_CFG_L1_TYPE_DCL(...)
#endif
#ifndef N3CF_CFG_L1_TYPE_ARRAY
#define N3CF_CFG_L1_TYPE_ARRAY(...)
#endif
#ifndef N3CF_CFG_L1_TYPE_END
#define N3CF_CFG_L1_TYPE_END(...)
#endif
#ifndef N3CF_CFG_L2_TYPE_START
#define N3CF_CFG_L2_TYPE_START(...)
#endif
#ifndef N3CF_CFG_L2_TYPE_DCL
#define N3CF_CFG_L2_TYPE_DCL(...)
#endif
#ifndef N3CF_CFG_L2_TYPE_ARRAY
#define N3CF_CFG_L2_TYPE_ARRAY(...)
#endif
#ifndef N3CF_CFG_L2_TYPE_END
#define N3CF_CFG_L2_TYPE_END(...)
#endif
/* Define macro expansion */
#define GET_START_MACRO_N3CF(_1, _2, _3, NAME, ...) NAME
#define N3CF_CFG_TYPE_START(...) \
GET_START_MACRO_N3CF(__VA_ARGS__, N3CF_CFG_L2_TYPE_START, \
N3CF_CFG_L1_TYPE_START, \
N3CF_CFG_L0_TYPE_START)(__VA_ARGS__)
#define GET_DCL_MACRO_N3CF(_type, _enum, _name, _cfg_dflt, _nv_dflt, _desc, _1, _2, _3, NAME, ...) NAME
#define N3CF_CFG_TYPE_DCL(...) \
GET_DCL_MACRO_N3CF(__VA_ARGS__, N3CF_CFG_L2_TYPE_DCL, \
N3CF_CFG_L1_TYPE_DCL, \
N3CF_CFG_L0_TYPE_DCL)(__VA_ARGS__)
#define GET_ARRAY_MACRO_N3CF(_type, _enum, _name, _size, _cfg_dflt, _nv_dflt, _desc, _1, _2, _3, NAME, ...) NAME
#define N3CF_CFG_TYPE_ARRAY(...) \
GET_ARRAY_MACRO_N3CF(__VA_ARGS__, N3CF_CFG_L2_TYPE_ARRAY, \
N3CF_CFG_L1_TYPE_ARRAY, \
N3CF_CFG_L0_TYPE_ARRAY)(__VA_ARGS__)
#define GET_END_MACRO_N3CF(_1, _2, _3, NAME, ...) NAME
#define N3CF_CFG_TYPE_END(...) \
GET_END_MACRO_N3CF(__VA_ARGS__, N3CF_CFG_L2_TYPE_END, \
N3CF_CFG_L1_TYPE_END, \
N3CF_CFG_L0_TYPE_END)(__VA_ARGS__)
/*
* N3CF Config
*
* Format:
* # no need to end with ','
*
* N3CF_CFG_TYPE_START(_obj...)
* N3CF_CFG_TYPE_DCL(_obj..., _cfg_type, _cfg_enum, _cfg_name, _cfg_dflt, _nv_dflt, _desc)
* ...
* N3CF_CFG_TYPE_END(_obj...)
*/
/*
* N3CF Configs
*/
/* CONFIG_START */
N3CF_CFG_L0_TYPE_START(n3cf_cfg, "N3 related configuration";)
/**** Copy from WO ***********************************************/
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, N3CF_EM_OP_ID, n3cf_em_op_id, 0, UNDEF_CONFIG_32, ".";)
N3CF_CFG_L0_TYPE_ARRAY(n3cf_cfg, kal_uint8, WO_CFG_EPDG_FQDN, epdg_fqdn, 256, "", UNDEF_CONFIG_8, "[MCF,STRING]Indicate the FQDN or IP of ePDG server (String format and ',' is delimiter)" {};)
// N3CF_CFG_L0_ENUM_ALIAS(WO_CFG_START, WO_CFG_EPDG_FQDN)
N3CF_CFG_L0_TYPE_ARRAY(n3cf_cfg, kal_uint8, WO_CFG_EPDG_FQDN_EM, epdg_fqdn_em, 256, "", UNDEF_CONFIG_8, "[MCF,STRING]Indicate the FQDN or IP of Emergency ePDG server (String format and ',' is delimiter)" {};)
N3CF_CFG_L0_TYPE_ARRAY(n3cf_cfg, kal_uint8, WO_CFG_IKE_INTERFACE, ikev2if, 16, "wlan0", UNDEF_CONFIG_8, "[INTERNAL]Indicate Wi-Fi interface name for IKEv2 used (String format)" {};)
N3CF_CFG_L0_TYPE_ARRAY(n3cf_cfg, kal_uint8, WO_CFG_SELECT_INFO, select_info, 256, "", UNDEF_CONFIG_8, "[MCF,STRING]The PLMN list which is support ePDG service and the corresponding type to construct the ePDG FQDN (String format)" {};)
N3CF_CFG_L0_TYPE_ARRAY(n3cf_cfg, kal_uint8, WO_CFG_SELECT_INFO_EM, select_info_em, 256, "", UNDEF_CONFIG_8, "[MCF,STRING]The PLMN list which is support Emergency ePDG service and the corresponding type to construct the Emergency ePDG FQDN (String format)" {};)
N3CF_CFG_L0_TYPE_ARRAY(n3cf_cfg, kal_uint8, WO_CFG_EPDG_IDENTIFIER, epdg_identifier, 256, "", UNDEF_CONFIG_8, "[MCF,STRING]The identifier list of Home-PLMN ePDG (String format and ',' is delimiter)" {};)
N3CF_CFG_L0_TYPE_ARRAY(n3cf_cfg, kal_uint8, WO_CFG_EPDG_IDENTIFIER_EM, epdg_identifier_em, 256, "", UNDEF_CONFIG_8, "[MCF,STRING]The identifier list of Home-PLMN Emergency ePDG (String format and ',' is delimiter)" {};)
N3CF_CFG_L0_TYPE_ARRAY(n3cf_cfg, kal_uint8, WO_CFG_RETRY_VECTOR, retry_vector, 256, "'rst=ssid,wifien,wfc','24,4,8,43200','46,4,8,43200','1081,4,8,16,32,64,128,256,512,1024','8192,4,8,43200','9000-9006,4,8,43200','11001,4,8,43200','11011,4,8,43200'", UNDEF_CONFIG_8, "[MCF,STRING]The string vector including error code range and retry timer value used for data retry (String format)" {};)
N3CF_CFG_L0_TYPE_ARRAY(n3cf_cfg, kal_uint8, WO_CFG_IKE_ALGO, ike_algo, 256, "aes128-sha1-modp1024!", UNDEF_CONFIG_8, "[MCF,STRING]Specifie the IKE algorithms types that are used by the UE (String format)" {};)
N3CF_CFG_L0_TYPE_ARRAY(n3cf_cfg, kal_uint8, WO_CFG_ESP_ALGO, esp_algo, 256, "aes128-sha1,3des-sha1", UNDEF_CONFIG_8, "[MCF,STRING]Specifie the ESP algorithms types that are used by the UE (String format)" {};)
// N3CF_CFG_L0_ENUM_ALIAS(WO_CFG_STR_TYPE_END, WO_CFG_ESP_ALGO)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_IKE_REKEY_TIMER, ike_rekey_timer, 81000, UNDEF_CONFIG_32, "[MCF]Lifetime (in seconds) of an IKE SA. UE should do IKEv2 rekey procedure before the lifetime of the IKE SA" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_ESP_REKEY_TIMER, esp_rekey_timer, 81000, UNDEF_CONFIG_32, "[MCF]Lifetime (in seconds) of an ESP SA. UE should do ESP rekey procedure before the lifetime of the ESP SA" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_REKEY_MARGIN, rekey_margin, 32400, UNDEF_CONFIG_32, "[MCF]Time (in seconds) before the rekeying should start. Before the key of IKE/ESP SA was expired, IKEv2/ESP should start the rekey job. The rekey timing should be between (lifetime - margin) to (lifetime)." {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_DPD_TIMER, dpd_timer, 120, UNDEF_CONFIG_32, "[MCF]Time period in seconds after which the UE shall perform the DPD" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_KEEP_ALIVE_TIMER, keep_timer, 20, UNDEF_CONFIG_32, "[MCF]Time in seconds after which the UE shall send NATT keep-alive messages" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_TUNNEL_SETUP_TIMER, esp_setup_time, 0, UNDEF_CONFIG_32, "[MCF]Maximum time in seconds for 1 tunnel setup; set to 0 will be auto-generated by retransmission timeout" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_PDN_SETUP_TIMER, pdn_setup_time, 295, UNDEF_CONFIG_32, ".";)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_CERT_REQ, cert_used, 1, UNDEF_CONFIG_8, "[MCF]" {
cert_used: 8 "Used to determine if certificates are used to authenticate the ePDG server during tunnel establishment procedures" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_CERT_HASHANDURL, urlcert, 0, UNDEF_CONFIG_8, "[MCF]" {
urlcert: 8 "Support HTTP cert or not (Hash and URL of X.509)" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_CERT_OCSP, ocsp, 0, UNDEF_CONFIG_8, "[MCF]" {
ocsp: 8 "Support OCSP in certificate" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_SERVER_NO_CERT, nocert, 1, UNDEF_CONFIG_8, "[MCF]" {
nocert: 8 "UE did not expect certificate from ePDG" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_SKIP_CHECK_CERT, skip_check_cert, 0, UNDEF_CONFIG_8, "[MCF]" {
skip_check_cert: 8 "Skip to check Certificate from ePDG even UE recevid certificate. When IODT/IOT, certificate may be not correct from ePDG. This option provide tester skip the certificate issue in test stage." {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_SKIP_CHECK_ID, noid, 1, UNDEF_CONFIG_8, "[MCF]" {
noid: 8 "Skip to check IDr in Certificate from ePDG" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_FORCE_TSI_64, force_tsi_64, 1, UNDEF_CONFIG_8, "[MCF]" {
force_tsi_64: 8 "Replace the value in TSi with the prefix_64bits internal IPv6 address for IPv6 only, if tsi_full and tsi_64 all enabled, apply tsi_full first and then tsi_64" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_FORCE_TSI_FULL, force_tsi_full, 1, UNDEF_CONFIG_8, "[MCF]" {
force_tsi_full: 8 "Replace the IP address in TSi with the whole IP address (full IPv6 address and IPv4 addresss)" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_USE_CFG_VIP, use_cfg_vip, 0, UNDEF_CONFIG_8, "[MCF]" {
use_cfg_vip: 8 "Install the address which in requested INTERNAL_IP*_ADDRESS configuration payload (not from responded one)" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_ADDR_CHANGE_REAUTH, reauth_addr, 0, UNDEF_CONFIG_8, "[MCF]" {
reauth_addr: 8 "Do IKEv2 re-authentication when address changed" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_DPD_NO_REPLY, dpd_no_reply, 0, UNDEF_CONFIG_8, "[MCF]" {
dpd_no_reply: 8 "Do not reply DPD requests from ePDG" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_PRE_POST_PING, pre_post_ping, 0, UNDEF_CONFIG_8, "[INTERNAL]" {
pre_post_ping: 8 "ping ePDG before establishing PDN (This config is no use anymore)" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_LOG_LEVEL, log_level, 1, UNDEF_CONFIG_8, "[MCF]" {
log_level: 8 "Debugging log level" {
0: "Level 0";
1: "Level 1";
2: "Level 2";
3: "Level 3";
4: "Level 4";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_WIFI_DRIVER_KEEP_ALIVE, wdrv_keep_alive, 1, UNDEF_CONFIG_8, "[MCF]" {
wdrv_keep_alive: 8 "Sent NAT Keep-alive packets by Wi-Fi driver, and AP can go to sleep (Depend on if Wi-Fi driver supports this feature or not)" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_IKE_FRAGMENTATION, fragment, 0, UNDEF_CONFIG_8, "[MCF]" {
fragment: 8 "Support IKEv2 Fragmentation" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_MOBIKE, mobike, 0, UNDEF_CONFIG_8, "[MCF]" {
mobike: 8 "Support Mobike" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_OUT_OF_SERVICE_TIMER, oos, 7, UNDEF_CONFIG_32, "[MCF]Maximum time in seconds for OOS timeout" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_IKE_RETRAN_TO, retrans_to, 2, UNDEF_CONFIG_32, "[MCF]Retransmission timeout in seconds for IKEv2 packet" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_IKE_RETRAN_TRIES, retrans_tries, 4, UNDEF_CONFIG_8, "[MCF]Maximum number of times a UE shall retransmit an IKEv2 packet if it does not receive a response" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_IKE_RETRAN_BASE, retrans_base, 1, UNDEF_CONFIG_8, "[MCF]Base to use for IKEv2 calculating exponential back off" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_TUNNEL_MTU, mtu, 1280, UNDEF_CONFIG_16, "[MCF]MTU size (byte) of the ESP tunnel" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_TUNNEL_MSS4_OFFSET, mss4_off, 68, UNDEF_CONFIG_16, "[MCF]TCP Maximum Segment Size offset (byte) of IPv4 for the ESP tunnel" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_TUNNEL_MSS6_OFFSET, mss6_off, 88, UNDEF_CONFIG_16, "[MCF]TCP Maximum Segment Size offset (byte) of IPv6 for the ESP tunnel" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_CUST_PCSCF_IP4_CP, cust_pcscf_4, 20, UNDEF_CONFIG_16, "[MCF]Configuration Payload Attribute Type value for P_CSCF_IP4_ADDRESS" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_CUST_PCSCF_IP6_CP, cust_pcscf_6, 21, UNDEF_CONFIG_16, "[MCF]Configuration Payload Attribute Type value for P_CSCF_IP6_ADDRESS" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_CUST_IMEI_CP, cust_imei_cp, 0, UNDEF_CONFIG_16, "[MCF]Configuration Payload Attribute Type value for IMEI" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_IKE_PORT, port, 10500, UNDEF_CONFIG_16, "[INTERNAL]UDP port number of IKEv2" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_IKE_PORT_NATT, port_natt, 14500, UNDEF_CONFIG_16, "[INTERNAL]UDP port number of IKEv2 NAT-T" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_IKE_CPA_NM_NUM, cpa_nm, 0, UNDEF_CONFIG_16, "[MCF]Number of INTERNAL_IP4_NETMASK configuration payloads will be added in IKE_AUTH" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_IKE_CPA_DNS4_NUM, cpa_dns4, 1, UNDEF_CONFIG_16, "[MCF]Number of INTERNAL_IP4_DNS configuration payloads will be added in IKE_AUTH" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_IKE_CPA_DNS6_NUM, cpa_dns6, 1, UNDEF_CONFIG_16, "[MCF]Number of INTERNAL_IP6_DNS configuration payloads will be added in IKE_AUTH" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_IKE_NO_INIT_CONTACT, no_ic, 0, UNDEF_CONFIG_8, "[MCF]" {
no_ic: 8 "Don't add INIT_CONTACT notify payload in IKEv2 request" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_IKE_NO_EAPONLY, no_eap, 0, UNDEF_CONFIG_8, "[MCF]" {
no_eap: 8 "Don't add EAPONLY notify payload in IKEv2 request" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_IKE_DSCP, ike_dscp, 0, UNDEF_CONFIG_8, "[MCF]DSCP(Differentiated Services Code Point) value for outgoing IKEv2 packets sent from this connection. The value is a 6-bits decimal (0~63)." {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_IKE_IDI, IDi, IDI_RFC822_ADDR, UNDEF_CONFIG_8, "[MCF]" {
IDi: 8 "Specifies the format of the IDi that should be used in the IKEv2 authentication message(s)" {
0: "ID_RFC822_ADDR is the 3GPP standard IDi format.";
1: "ID_RFC822_ADDR_MAC is the IDi and EAP Auth ID both using ID_RFC822_ADDR-based format with inclusion of the WiFi MAC";
2: "ID_RFC822_ADDR_MAC_EAP_NO_MAC is the IDi using ID_RFC822_ADDR_MAC-based format, but EAP Auth ID using ID_RFC822_ADDR-based format.";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_IKE_IDR, IDr, IDR_FQDN, UNDEF_CONFIG_8, "[MCF]" {
IDr: 8 "Specifies the format of the IDr that should be used in the IKEv2 authentication message(s)" {
0: "ID_KEY_ID";
1: "ID_FQDN";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_LEFT_AUTH_TYPE, leftauth, AUTH_EAP, UNDEF_CONFIG_8, "[MCF]" {
leftauth: 8 "The IKEv2 authentication method" {
0: "AUTH_EAP";
1: "AUTH_PSK";
2: "AUTH_PUBKEY";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_EAP_TYPE, eap, EAP_AKA, UNDEF_CONFIG_8, "[MCF]" {
eap: 8 "The EAP algorithm in Authentication" {
0: "EAP-AKA";
1: "EAP-SIM";
2: "EAP-AKA'";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_FAST_REAUTH, fastreauth, 0, UNDEF_CONFIG_8, "[MCF]" {
fastreauth: 8 "Support fast re-authentication" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_DNS_QUERY_TIMER, dns_timer, 0, UNDEF_CONFIG_32, "[MCF]Maximum time in seconds. DNS query will not be performed before timeout" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_DNS_TYPE, dns_type, DNS_ADDR_V6V4, UNDEF_CONFIG_8, "[MCF]" {
dns_type: 8 "Choose preferred address type got from DNS" {
0: "DNS_ADDR_V4";
1: "DNS_ADDR_V6";
2: "DNS_ADDR_V4V6";
3: "DNS_ADDR_V6V4";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_DNS_MAX_COUNT, dns_max_count, 254, UNDEF_CONFIG_8, "[MCF]Maximum number for DNS results" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_DNS_CACHE, dns_cache, 1, UNDEF_CONFIG_8, "[MCF]" {
dns_cache: 8 "Cache the DNS result for last connected ePDG server" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_REDIRECT, redirect, 0, UNDEF_CONFIG_8, "[INTERNAL]" {
redirect: 8 "Support IKEv2 redirect feature" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_MAX_REDIRECTS, max_redirects, 5, UNDEF_CONFIG_16, "[INTERNAL]Maximum redirect times for IKEv2 redirect" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_REDIRECT_LOOP_DETECT, redirect_loop_detect, 300, UNDEF_CONFIG_16, "[INTERNAL]Time in seconds to detect the IKEv2 redirect loop" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_DETACH_SOFT_TIMER, detach_soft_timer, 3, UNDEF_CONFIG_16, "[MCF]Time in seconds after which the UE shall reply detach resposne" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_DETACH_HARD_TIMER, detach_hard_timer, 300, UNDEF_CONFIG_16, "[MCF]Time in seconds after which the UE shall stop detaching and local cleanup" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_FORCE_DPD_RETRAN_TO, fdpd_retrans_to, 1, UNDEF_CONFIG_32, "[MCF]Retransmission timeout in seconds for force DPD" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_FORCE_DPD_RETRAN_TRIES, fdpd_retrans_tries, 2, UNDEF_CONFIG_8, "[MCF]Maximum number of times a UE shall retransmit a force DPD packet if it does not receive a response" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_FORCE_DPD_RETRAN_BASE, fdpd_retrans_base, 1, UNDEF_CONFIG_8, "[MCF]Base to use for force DPD calculating exponential back off" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_CERTREQ_CRITICAL, certreq_critical, 0, UNDEF_CONFIG_8, "[MCF]" {
certreq_critical: 8 "Mark CERTREQ_CRITICAL bit in IKEv2 request" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_PCSCF_RESTORE, pcscf_restore, 0, UNDEF_CONFIG_8, "[MCF]" {
pcscf_restore: 8 "Add PCSCF_RESTORE notify payload in IKEv2 request" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_LIVENESS_CHECK, liveness_check, 0, UNDEF_CONFIG_8, "[MCF]" {
liveness_check: 8 "Add LIVENESS_CHECK configuration payload in IKEv2 request" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_DEVICE_IDENTITY, device_identity, 0, UNDEF_CONFIG_8, "[MCF]" {
device_identity: 8 "Add DEVICE_IDENTITY notify payload in IKEv2 request" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_ABORT_BLOCKING_MODE, abort_mode, 0, UNDEF_CONFIG_8, "[MCF]" {
abort_mode: 8 "Allow IKEv2 setup completed before delete if abort request received" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_HO_IP_DISCONTINUITY, ho_ip_disc, 0, UNDEF_CONFIG_8, "[MCF]" {
ho_ip_disc: 8 "Allow LTE to Wi-Fi Handover IP discontinuity" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_VISITED_EPDG, visited_epdg, 0, UNDEF_CONFIG_8, "[MCF]" {
visited_epdg: 8 "Support Visited EPDG selection" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_EMERGENCY_EPDG, emerg_epdg, EMERG_EPDG_SELECT_NONE, UNDEF_CONFIG_8, "[MCF]" {
emerg_epdg: 8 "Support Emergency EPDG selection" {
0: "EMERG_EPDG_SELECT_NONE";
1: "EMERG_EPDG_SELECT";
2: "EMERG_EPDG_SELECT_WITH_VISITED";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_EMERGENCY_NAI, emerg_nai, 0, UNDEF_CONFIG_8, "[MCF]" {
emerg_nai: 8 "Construct NAI with Emergency format" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_EMERGENCY_NO_SIM, emerg_no_sim, 0, UNDEF_CONFIG_8, "[INTERNAL]" {
emerg_no_sim: 8 "Support Emergency service without SIM" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_SEND_DEL_IKE_AUTH_NTFY_ERR, send_del_ike_auth_ntfy_err, 0, UNDEF_CONFIG_8, "[MCF]" {
send_del_ike_auth_ntfy_err: 8 "Send delete IKEv2 SA after specific notify error" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_EMERGENCY_NUMBERS, emerg_numbers, 0, UNDEF_CONFIG_8, ".";)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_TRY_EPDG_POLICY, try_epdg_policy, TRY_ALL_EPDG_IP, UNDEF_CONFIG_8, ".";)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_IMEI_FORMAT, imei_format, IMEI_BCD, UNDEF_CONFIG_8, ".";)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_LEAVE_STANDBY_DPD, leave_standby_dpd, 0, UNDEF_CONFIG_8, ".";)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_FRAG_SZ_V4, frag_sz_v4, 576, UNDEF_CONFIG_16, ".";)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint16, WO_CFG_FRAG_SZ_V6, frag_sz_v6, 1280, UNDEF_CONFIG_16, ".";)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_OOS_EXTEND, oos_extend, 0, UNDEF_CONFIG_8, ".";)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_N1_MODE_CAP, n1_mode_cap, 0, UNDEF_CONFIG_8, "[MCF]Send N1_MODE_CAPABILITY notify payload to NW in establishment.";)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_EPDG_SELECT_POLICY, epdg_select_policy, 0, UNDEF_CONFIG_8, "[MCF]" {
epdg_select_policy: 8 "Support epdg selection process customize" {
0: "epdg selection mechanism default";
1: "epdg selection mechanism custom_1";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint32, WO_CFG_OOS_MOBIKE_EXTEND, oos_mobike_extend, 0, UNDEF_CONFIG_32, "[MCF]Extend time in seconds for OOS timeout if MOBIKE supported was indicated by networks" {};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_DEVICE_IDENTITY_TYPE, device_identity_type, DEV_ID_IMEI, UNDEF_CONFIG_8, "[MCF]" {
device_identity_type: 8 "DEVICE_IDENTITY type in notify payload" {
0: "DEV_ID_IMEI";
1: "DEV_ID_IMEISV";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_PSEUDONYM, pseudonym, 0, UNDEF_CONFIG_8, "[MCF]" {
pseudonym: 8 "Support pseudonym identity in EAP authentication" {
0: "Disable";
1: "Enable";
};
};)
N3CF_CFG_L0_TYPE_DCL(n3cf_cfg, kal_uint8, WO_CFG_FILTER_PRIORITY, filter_priority, 0, UNDEF_CONFIG_8, "[INTERNAL]" {
filter_priority: 8 "Allows to Modify wifiproxy filter priority configuration" {
0: "Use normal filter priority configuration";
1: "Don't use normal filter priority, It will not use MD direct path";
};
};)
N3CF_CFG_L0_TYPE_END(n3cf_cfg)
/* CONFIG_END */