| /*********************************** |
| * 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 */ |