1. 24 Apr, 2019 1 commit
    • Bi-Ruei, Chiu's avatar
      Fix incorrect UPER encoding for empty extensible SEQUENCE in 38.331 · f12568d6
      Bi-Ruei, Chiu authored
      For empty extensible SEQUENCE type, e.g.
      
        searchSpaceType              CHOICE {
          common                       SEQUENCE {
            dci-Format0-0-AndFormat1-0     SEQUENCE {
              ...
            }                                                           OPTIONAL,   -- Need R
            dci-Format2-0                SEQUENCE {
              nrofCandidates-SFI           SEQUENCE {
                aggregationLevel1            ENUMERATED {n1, n2}        OPTIONAL,   -- Need R
                aggregationLevel2            ENUMERATED {n1, n2}        OPTIONAL,   -- Need R
                aggregationLevel4            ENUMERATED {n1, n2}        OPTIONAL,   -- Need R
                aggregationLevel8            ENUMERATED {n1, n2}        OPTIONAL,   -- Need R
                aggregationLevel16           ENUMERATED {n1, n2}        OPTIONAL    -- Need R
              },
              ...
            }                                                         OPTIONAL,   -- Need R
            dci-Format2-1                SEQUENCE {
              ...
            }                                                         OPTIONAL,   -- Need R
            dci-Format2-2                SEQUENCE {
              ...
            }                                                         OPTIONAL,   -- Need R
            dci-Format2-3                SEQUENCE {
              dummy1                       ENUMERATED {sl1, sl2, sl4, sl5, sl8, sl10, sl16, sl20}    OPTIONAL,   -- Cond Setup
              dummy2                       ENUMERATED {n1, n2},
              ...
            }                                                         OPTIONAL    -- Need R
          },
          ue-Specific                    SEQUENCE {
            dci-Formats                    ENUMERATED {formats0-0-And-1-0, formats0-1-And-1-1},
            ...
          }
        }
      
      According to X.691 :
      
        If the sequence type has an extension marker in the "ComponentTypeLists"
        or in the "SequenceType" productions, then a single bit shall first be added to
        the field-list in a bit-field of length one.
      
      So for dci-Format0-0-AndFormat1-0, dci-Format2-1 and dci-Format2-2,
      even they are empty without other fields, there shall be still one extension bit
      to be added.
      
      Use compute_extensions_start() to determine position of extension in
      asn1c_lang_C_type_SEQUENCE_def() to fix this problem.
      f12568d6
  2. 16 Jan, 2019 1 commit
    • Bi-Ruei, Chiu's avatar
      Fix code generated from ASN.1 of F1AP v15.4.0 failed to be compiled · 4e7edb05
      Bi-Ruei, Chiu authored
      ProtocolExtensionField.c generated from the following excerpt from ASN.1 of F1AP v15.4.0 :
      
      RRC-Version ::= SEQUENCE {
          latest-RRC-Version BIT STRING (SIZE(3)),
          iE-Extensions      ProtocolExtensionContainer { { RRC-Version-ExtIEs } } OPTIONAL}
      
      RRC-Version-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
          {ID id-latest-RRC-Version-Enhanced CRITICALITY ignore EXTENSION OCTET STRING (SIZE(3)) PRESENCE optional },
          ...
      }
      
      failed to be compiled because asn_PER_memb_OCTET_STRING_SIZE_3__constr_31 is not generated.
      
      The reason is constraints of types used in information object sets are not processed in asn1fix() stage
      so it's constraint, i.e. (SIZE(3)) in this case, is not generated.
      
      With this fix, OCTET STRING (SIZE(3)) used in ASN.1 of F1AP v15.4.0 can be correctly processed
      and generated code can be compiled.
      
      However, this fix does not work for all sorts of types.
      
      For example, if information object refer to a type like this : SEQUENCE (SIZE(3)) OF INTEGER
      it will be failed to compiled because asn_IOS_RRC_Version_ExtIEs_1_rows[] refers to non-existing
      asn_DEF_SEQUENCE_OF.
      4e7edb05
  3. 25 Oct, 2018 1 commit
    • Bi-Ruei, Chiu's avatar
      Fix the problem that duplicate type names exist in OPEN TYPE · 0a752418
      Bi-Ruei, Chiu authored
      This is a side-effect of commit :
      
        939573d7 and
        dcc822a0
      
      Which intends to solve the problem result from, e.g. for the following ASN.1 :
      
        HandoverRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= {
          { ID id-Old-eNB-UE-X2AP-ID  CRITICALITY ignore  TYPE UE-X2AP-ID  PRESENCE mandatory}|
          { ID id-New-eNB-UE-X2AP-ID  CRITICALITY ignore  TYPE UE-X2AP-ID  PRESENCE mandatory}|
          ...
        }
      
      Items with id-Old-eNB-UE-X2AP-ID and id-New-eNB-UE-X2AP-ID are both of
      type UE-X2AP-ID, so the generated enum type HandoverRequestAcknowledge_IEs__value_PR
      will have two identical members :
      
        typedef enum HandoverRequestAcknowledge_IEs__value_PR {
            HandoverRequestAcknowledge_IEs__value_PR_NOTHING,    /* No components present */
            HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
            HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
            ...
        } HandoverRequestAcknowledge_IEs__value_PR
      
      and the generated struc type HandoverRequestAcknowledge_IEs_t
      will also have two identical members :
      
        typedef struct HandoverRequestAcknowledge_IEs {
            ProtocolIE_ID_t  id;
            Criticality_t    criticality;
            struct HandoverRequestAcknowledge_IEs__value {
                HandoverRequestAcknowledge_IEs__value_PR present;
                union XHandoverRequestAcknowledge_IEs__value_u {
                    UE_X2AP_ID_t  UE_X2AP_ID;
                    UE_X2AP_ID_t  UE_X2AP_ID;
                    ...
                } 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;
        } HandoverRequestAcknowledge_IEs_t;
      
      these code excerpts results in compilation error.
      
      Previous commits solve it by skipping duplicate items but raise
      a side-effect that asn_MBR_HandoverRequestAcknowledge_IEs only has
      one item corresponding UE_X2AP_ID field.
      
      This commit rename the second item by adding '_2' (or said '_%d'
      according to number of occurrence) to their names thus solve the
      conflict.
      0a752418
  4. 06 Oct, 2018 1 commit
  5. 30 Sep, 2018 2 commits
    • Bi-Ruei, Chiu's avatar
      Fix the problem that user supplied value not used in APER · bf70e374
      Bi-Ruei, Chiu authored
      For the following examplified ASN.1,
      
        TEST DEFINITIONS AUTOMATIC TAGS ::=
        BEGIN
      
        S1 ::= SEQUENCE  {
          fn INTEGER,
          fb BIT STRING DEFAULT 'A5'H,
          fc OCTET STRING DEFAULT 'FFAABB'H
        }
      
        END
      
      and input XER as :
      
        <S1>
          <fn>9845</fn>
          <fc>DEAD9</fc>
        </S1>
      
      The encoded APER should be :
      
        S1 ::= {
          fn: 9845
          fb: A5
          fc: DE AD 90
        }
      
      but current output is
      
        S1 ::= {
          fn: 9845
          fb: A5
          fc: FF AA BB
        }
      
      The reason is in SEQUENCE_encode_aper(), default_value_cmp() are
      incorrectly checked against 1.
      
      If the input value is equal to default value, this return value from
      compare function is 0.
      bf70e374
    • Bi-Ruei, Chiu's avatar
      Fix issue 293 by handling default value with type ATV_BITVECTOR · fa5a147e
      Bi-Ruei, Chiu authored
      1. Modify asn1p_y.c and asn1p_y.y to fix an error that
         function _convert_bitstring2binary() always return NULL.
      
      2. Add handling for default value with type ATV_BITVECTOR in
         function try_inline_default().
      fa5a147e
  6. 28 Sep, 2018 1 commit
    • Bi-Ruei, Chiu's avatar
      Add support of extension group inside CHOICE type · 3d76a039
      Bi-Ruei, Chiu authored
      In LTE-RRC 36.331 15.3.0, there is :
      
          RLC-Config-NB-r13 ::= CHOICE {
              am    SEQUENCE {
                  ul-AM-RLC-r13                UL-AM-RLC-NB-r13,
                  dl-AM-RLC-r13                DL-AM-RLC-NB-r13
              },
              ...,
              [[  um-Bi-Directional-r15        NULL,
                  um-Uni-Directional-UL-r15    NULL,
                  um-Uni-Directional-DL-r15    NULL
              ]]
          }
      
      that asn1c can not handle `[[` ... `]]` inside CHOICE type.
      
      1. Modify asn1p_y.y and asn1p_y.c to mimic the approach for handling extension
         group inside SEQUENCE type.
      
      2. Modify asn1c_C.c to use 'ext1', 'ext2' ... as extension groups names.
      3d76a039
  7. 15 Sep, 2018 1 commit
    • Bi-Ruei, Chiu's avatar
      Fix the problem that NGAP ASN.1 can not generate C files · 995c5bd4
      Bi-Ruei, Chiu authored
      Because TAIItem and TAIList exist in NAGP-IEs module and NGAP-PDU
      module, so name conflict condition occurs.
      
      Previous returned value from asn1p_oid_compare() in asn1f_check_duplicate()
      is incorrectly checked. Fix it by adding additional ASN1FIX flag
      A1F_COMPOUND_NAMES which is set in asn1c.c.
      995c5bd4
  8. 16 Aug, 2018 2 commits
  9. 21 Jun, 2018 1 commit
    • Bi-Ruei, Chiu's avatar
      Fix reference comes from another module · ec830d70
      Bi-Ruei, Chiu authored
      In ASN.1 of 38.331 rev 15.2.1, module NR-InterNodeDefinitions
      imports GapConfig from NR-RRC-Definition module. It should treat
      
        SetupRelease { GapConfig }
      
      in module NR-InterNodeDefinitions the same as the one in
      module NR-RRC-Definition.
      ec830d70
  10. 31 May, 2018 2 commits
    • Bi-Ruei, Chiu's avatar
      Regenerte test cases · 054f06c2
      Bi-Ruei, Chiu authored
      054f06c2
    • Bi-Ruei, Chiu's avatar
      Add min and max value of INTEGER(min..max) to asn_constant.h · efd2af41
      Bi-Ruei, Chiu authored
      For the following ASN.1 excerpt, the value of these Types will
      be checked against its valid range in their corresponding
      constraint functions.
      
      DRB-Identity ::= INTEGER(1..32)
      RSRP-Range   ::= INTEGER(0..97)
      RSRQ-Range   ::= INTEGER(0..34)
      
      Sometime it is convenient for application being aware of these
      min and max values.
      
      This commit generate the following macro defintions in
      asn_constant.h :
      
      \#define min_val_DRB_Identity (1)
      \#define max_val_DRB_Identity (32)
      \#define min_val_RSRP_Range (0)
      \#define max_val_RSRP_Range (97)
      \#define min_val_RSRQ_Range (0)
      \#define max_val_RSRQ_Range (34)
      efd2af41
  11. 30 May, 2018 1 commit
    • Bi-Ruei, Chiu's avatar
      Fix the problem when ActualParameter to parameterized type is a Type · d64be68b
      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.
      d64be68b
  12. 19 Apr, 2018 1 commit
    • Bi-Ruei, Chiu's avatar
      Fix item 2 of issue 254 · 0bb89078
      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
      0bb89078
  13. 12 Apr, 2018 2 commits
  14. 21 Mar, 2018 6 commits
  15. 14 Mar, 2018 3 commits
  16. 09 Mar, 2018 2 commits
  17. 08 Mar, 2018 5 commits
  18. 07 Mar, 2018 1 commit
  19. 06 Mar, 2018 1 commit
  20. 05 Mar, 2018 4 commits
  21. 09 Feb, 2018 1 commit