- 30 May, 2018 1 commit
-
-
Bi-Ruei, Chiu authored
When ActualParameter to a parameterized type is a Type, commit 59b9e705 will produce C struct types using ActualParameter, which are conflict with the C struct types for these Types themselves. For example, the following typedef has duplicate definition of UCI_OnPUSCH_t : typedef struct UCI_OnPUSCH { UCI_OnPUSCH_PR present; union UCI_OnPUSCH_u { NULL_t release; UCI_OnPUSCH_t setup; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } UCI_OnPUSCH_t; With this commit, if ActualParameter is a Type, then prefix it with Parameterized Type name. typedef struct SetupRelease_UCI_OnPUSCH { SetupRelease_UCI_OnPUSCH_PR present; union SetupRelease_UCI_OnPUSCH_u { NULL_t release; UCI_OnPUSCH_t setup; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SetupRelease_UCI_OnPUSCH_t; As for ActualParameter is ObjectSet, used in S1AP ... etc, it doesn't prefix generated typedefs for keeping names shorter. This commit can replace item 3 of https://github.com/vlm/asn1c/issues/282#issuecomment-390838895 which solve part of #282.
-
- 19 Apr, 2018 1 commit
-
-
Bi-Ruei, Chiu authored
1. Record the de-referenced expression to newly added field ref_expr of strcut asn1p_ref_t. 2. In function asn1c_make_identifier(), not only check whehter there is name clash occurred for this asn1p_expr_t but also the referenced expression to determine whether an additional module name to be added. 3. Change signature of some functions and variables to eliminate warning messages when const type pointer, i.e. const asn1p_ref_t *, variables versus, non-const * type pointer, i.e. asn1p_ref_t *, varibles are used. E.g.: warning: assignment discards ‘const’ qualifier from pointer target type
-
- 12 Apr, 2018 2 commits
-
-
Bi-Ruei, Chiu authored
-
Bi-Ruei, Chiu authored
Mimic what OAI's asnfix.c of generate_asn1 script does.
-
- 21 Mar, 2018 6 commits
-
-
Vasil Velichkov authored
asn1c_save.c:238:5: error: this ‘for’ clause does not guard... [-Werror=misleading-indentation] for(int i = 0; i < argc; i++) ^~~ asn1c_save.c:240:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘for’ safe_fprintf(mkf, "\n\n"); ^~~~~~~~~~~~
-
Vasil Velichkov authored
../skeletons/INTEGER.c:510:60: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare] if(specs && specs->field_unsigned && dec_value <= ULONG_MAX) {
-
Vasil Velichkov authored
This fixes the following undefined behaviour converter-example.c:721:13: runtime error: null pointer passed as argument 2, which is declared to never be null /usr/include/string.h:44:28: note: nonnull attribute specified here
-
Vasil Velichkov authored
Previously some uper_* function were called
-
Vasil Velichkov authored
When there were no any padding bits the uper and aper decoders where trying to read some which results in read past the buffer end. See https://github.com/mouse07410/asn1c/issues/33#issuecomment-374625610 ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000000315 at pc 0x000102ce9c15 bp 0x7fff5d20a8d0 sp 0x7fff5d20a8c8 READ of size 1 at 0x602000000315 thread T0 #0 0x102ce9c14 in asn_get_few_bits asn_bit_data.c:132 #1 0x102d878fd in aper_open_type_get_simple per_opentype.c:455 #2 0x102d85dcc in aper_open_type_get per_opentype.c:514
-
Mouse authored
-
- 14 Mar, 2018 3 commits
-
-
Vasil Velichkov authored
-
Vasil Velichkov authored
On i686 the long is 4 bytes and when converted to uint64_t some big unsigned values get converted to very big negative values See https://github.com/vlm/asn1c/issues/185#issuecomment-372546490
-
Vasil Velichkov authored
On i686 the long is 4 bytes and the right shift with more then 32 bits is probably an undefined behaviour See https://github.com/vlm/asn1c/issues/185#issuecomment-372546490
-
- 09 Mar, 2018 2 commits
-
-
Vasil Velichkov authored
-
Vasil Velichkov authored
Instead in two bytes the ENB-UE-S1AP-ID was encoded in three For value 2 the correct encoding is `02 00 02 00` and not `03 00 02 00 00` And the MME-UE-S1AP-ID were encoded in 5 instead of 4
-
- 08 Mar, 2018 5 commits
-
-
Vasil Velichkov authored
Files are from #185 and were renamed to match the Makefile's glob pattern bin/1.bin -> nextepc/sample-S1AP-PDU-1.aper Thanks to @acetcom
-
Vasil Velichkov authored
Previously when decoding fails the memory was reset with memset after casting the specifics to asn_CHOICE_specifics_t in order to get the size The problem is that the OPEN TYPE could contains a different type not derived from asn_CHOICE that does not have a struct_size member with a valid size. This fixes test failures in examples/sample.source.S1AP
-
Vasil Velichkov authored
This makes debugging and testing a lot more easier as skeleton files are not copied and you don't need to execute `make regen` after every change in the skeleton files. You need to manually remove all skeleton files and run `make regen-makefile` the first time after checking out this commit
-
Vasil Velichkov authored
Rename the existing files to match the glob used in the Makefile To execute the tests run `make check` or `make check-aper`
-
Vasil Velichkov authored
and regenerate the the S1AP Makefile
-
- 07 Mar, 2018 1 commit
-
-
Vasil Velichkov authored
-
- 06 Mar, 2018 1 commit
-
-
Vasil Velichkov authored
According to Rec. ITU-T X.691 (08/2015) 11.5.3 Let "range" be defined as the integer value ("ub" – "lb" + 1), and let the value to be encoded be "n". See also https://github.com/vlm/asn1c/issues/185#issuecomment-368745830
-
- 05 Mar, 2018 4 commits
-
-
Bi-Ruei, Chiu authored
-
Bi-Ruei, Chiu authored
-
Bi-Ruei, Chiu authored
-
Bi-Ruei, Chiu authored
When generating code for multiple ASN.1 syntaxes that have clashing names, we need to add a prefix in order to prevent clashes in the global C symbol namespace. Using the ASN1C_PREFIX environment variable and this patch serves as a work-around to that. All non-basic type names as well as references to that type and source code + header file names will be pre-fixed accordingly. This is a re-implementation of this feature due to osmocom's implementation version can not work on newest asn1c repository.
-
- 09 Feb, 2018 1 commit
-
-
Bi-Ruei, Chiu authored
-
- 02 Feb, 2018 1 commit
-
-
Bi-Ruei, Chiu authored
-
- 26 Jan, 2018 5 commits
-
-
Bi-Ruei, Chiu authored
-
Bi-Ruei, Chiu authored
1. Copying and modifying ANY_decode_uper() and ANY_encode_uper() to ANY_decode_aper() and ANY_encode_aper(). 2. Adding ANY_fromType_aper()/ANY_new_fromType_aper()/ ANY_to_type_aper().
-
Bi-Ruei, Chiu authored
Based on Velichkov's suggestion on comment : https://github.com/vlm/asn1c/issues/185#issuecomment-341944947
-
Bi-Ruei, Chiu authored
-
Bi-Ruei, Chiu authored
-
- 24 Jan, 2018 2 commits
-
-
Bi-Ruei, Chiu authored
-
Bi-Ruei, Chiu authored
For RANAP specification : RANAP-ELEMENTARY-PROCEDURE ::= CLASS { &InitiatingMessage, &SuccessfulOutcome OPTIONAL, &UnsuccessfulOutcome OPTIONAL, &Outcome OPTIONAL, &procedureCode ProcedureCode UNIQUE, &criticality Criticality DEFAULT ignore } WITH SYNTAX { INITIATING MESSAGE &InitiatingMessage [SUCCESSFUL OUTCOME &SuccessfulOutcome] [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] [OUTCOME &Outcome] PROCEDURE CODE &procedureCode [CRITICALITY &criticality] } Not all instances of elementary procedure have all their optional members defined. For examples : iu-Release RANAP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE Iu-ReleaseCommand SUCCESSFUL OUTCOME Iu-ReleaseComplete PROCEDURE CODE id-Iu-Release CRITICALITY reject } rAB-Assignment RANAP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE RAB-AssignmentRequest OUTCOME RAB-AssignmentResponse PROCEDURE CODE id-RAB-Assignment CRITICALITY reject } So there are empty cells generated in Outcome.c ... etc. static const asn_ioc_cell_t asn_IOS_RANAP_ELEMENTARY_PROCEDURES_1_rows[] = { { "&InitiatingMessage", aioc__type, &asn_DEF_Iu_ReleaseCommand }, { "&SuccessfulOutcome", aioc__type, &asn_DEF_Iu_ReleaseComplete }, { "&UnsuccessfulOutcome", }, { "&Outcome", }, { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_1_id_Iu_Release }, { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_1_reject }, { "&InitiatingMessage", aioc__type, &asn_DEF_RAB_AssignmentRequest }, { "&SuccessfulOutcome", }, { "&UnsuccessfulOutcome", }, { "&Outcome", aioc__type, &asn_DEF_RAB_AssignmentResponse }, { "&procedureCode", aioc__value, &asn_DEF_ProcedureCode, &asn_VAL_49_id_RAB_Assignment }, { "&criticality", aioc__value, &asn_DEF_Criticality, &asn_VAL_49_reject } } However, in type_selector() functions, these undefined cell are still be counted into presence_index value. This results in wrong behavior for decoder. This commit is to fix this problem.
-
- 23 Jan, 2018 4 commits
-
-
Bi-Ruei, Chiu authored
Currently, there is no code generated for following ASN.1 excerpt. Thus application is not aware of these values. ProtocolIE-ID ::= INTEGER (0..65535) id-MME-UE-S1AP-ID ProtocolIE-ID ::= 0 id-HandoverType ProtocolIE-ID ::= 1 id-Cause ProtocolIE-ID ::= 2 id-SourceID ProtocolIE-ID ::= 3 ... ProcedureCode ::= INTEGER (0..255) id-HandoverPreparation ProcedureCode ::= 0 id-HandoverResourceAllocation ProcedureCode ::= 1 id-HandoverNotification ProcedureCode ::= 2 id-PathSwitchRequest ProcedureCode ::= 3 ... This commit adds corresponding macro definitions in ProtocolIE-ID.h and ProcedureCode.h respectively. #define ProtocolIE_ID_id_MME_UE_S1AP_ID ((ProtocolIE_ID_t)0) #define ProtocolIE_ID_id_HandoverType ((ProtocolIE_ID_t)1) #define ProtocolIE_ID_id_Cause ((ProtocolIE_ID_t)2) #define ProtocolIE_ID_id_SourceID ((ProtocolIE_ID_t)3) ... #define ProcedureCode_id_HandoverPreparation ((ProcedureCode_t)0) #define ProcedureCode_id_HandoverResourceAllocation ((ProcedureCode_t)1) #define ProcedureCode_id_HandoverNotification ((ProcedureCode_t)2) #define ProcedureCode_id_PathSwitchRequest ((ProcedureCode_t)3) ... Only types of ASN_BASIC_INTEGER and ASN_BASIC_ENUMERATED referenced by these constant variables are handled. Other built-in types shall be added in the future.
-
Bi-Ruei, Chiu authored
Currently, there is no code generated for following ASN.1 excerpt. Thus application is not aware of these values. maxnoofErrors INTEGER ::= 256 maxnoofBPLMNs INTEGER ::= 6 maxnoofPLMNsPerMME INTEGER ::= 32 maxnoofEPLMNs INTEGER ::= 15 ... This commit generate asn_constant.h which has the following macro defitions : #define maxnoofErrors (256) #define maxnoofBPLMNs (6) #define maxnoofPLMNsPerMME (32) #define maxnoofEPLMNs (15) #define maxnoofEPLMNsPlusOne (16) ... It only handles ASN_BASIC_INTEGER type. Other built-in types shall be added in the future.
-
Bi-Ruei, Chiu authored
-
Bi-Ruei, Chiu authored
With previous commit, the following data types are generated in ProtocolIE-Field.h for S1AP's ASN.1 : ``` typedef enum ProtocolIE_Field_6564P0__value_PR { ProtocolIE_Field_6564P0__value_PR_NOTHING, /* No components present */ ProtocolIE_Field_6564P0__value_PR_E_RABToBeSetupItemBearerSUReq } ProtocolIE_Field_6564P0__value_PR; typedef struct ProtocolIE_Field_6564P0 { ProtocolIE_ID_t id; Criticality_t criticality; struct ProtocolIE_Field_6564P0__value { ProtocolIE_Field_6564P0__value_PR present; union ProtocolIE_Field_6564P0__value_u { E_RABToBeSetupItemBearerSUReq_t E_RABToBeSetupItemBearerSUReq; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } value; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } ProtocolIE_Field_6564P0_t; ``` It's difficult for developer to recognize to which ASN.1 type they are linked. They all start with 'ProtocolIE_Field_'. It will be error-prone. With this commit, more human comprehensible data types are generated : ``` typedef enum E_RABToBeSetupItemBearerSUReqIEs__value_PR { E_RABToBeSetupItemBearerSUReqIEs__value_PR_NOTHING, /* No components present */ E_RABToBeSetupItemBearerSUReqIEs__value_PR_E_RABToBeSetupItemBearerSUReq } E_RABToBeSetupItemBearerSUReqIEs__value_PR; typedef struct E_RABToBeSetupItemBearerSUReqIEs { ProtocolIE_ID_t id; Criticality_t criticality; struct E_RABToBeSetupItemBearerSUReqIEs__value { E_RABToBeSetupItemBearerSUReqIEs__value_PR present; union E_RABToBeSetupItemBearerSUReqIEs__value_u { E_RABToBeSetupItemBearerSUReq_t E_RABToBeSetupItemBearerSUReq; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } value; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } E_RABToBeSetupItemBearerSUReqIEs_t; ``` Developers can understand they are generated from : ``` E-RABToBeSetupItemBearerSUReqIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABToBeSetupItemBearerSUReq CRITICALITY reject TYPE E-RABToBeSetupItemBearerSUReq PRESENCE mandatory }, ... } ```
-
- 16 Jan, 2018 1 commit
-
-
Bi-Ruei, Chiu authored
-